C strtok() 未正确标记?

标签 c arrays string token strtok

我已经尝试解决这个问题有一段时间了,但我完全不知道如何解决这个问题。我有一个相当大的项目,我使用 strtok 无数次,没有任何问题,但它在这里不起作用。请帮忙:(

编辑:我正在寻找前缀删除而不是 strtok。如果有人感到困惑并用谷歌搜索此内容,我会将其留在这里。

这是有问题的代码:

#include <stdio.h>
#include <string.h>

int main()
{
   char root[1000]; 
   char home[1000];

   strcpy(root,"/Users/me/Desktop/my-project"); // this is working
   strcpy(home,"/Users/me/Desktop/my-project/home"); // this is working

   strtok(home,root); // here's the problem

   printf("%s",home);
}

结果 1:

/Users/me/Desktop/my-project/h

我也尝试过:

char *ptr = strtok(home,root);

printf("%s",ptr);

结果 2:

h

两者不应该返回/home吗?

最佳答案

正如 @paxdiablo 指出的那样,并且我在整个项目中使用它(我没有 sleep ,所以请原谅我),strtok(c​​har * str, char * delimiters) 获取一个列表分隔符。

我实际上想做的是从 home 字符串中删除 root 子字符串。

由于它们始终以相同的子字符串 /Users/me/Desktop/my-project 开头,因此我可以在 之后找到 home 特有的部分root 结束,这可以很容易地完成:

#include <stdio.h>
#include <string.h>

int main()
{
   char root[1000]; 
   char home[1000];

   strcpy(root,"/Users/mbp/Desktop/my-project");
   strcpy(home,"/Users/mbp/Desktop/my-project/home");

   int n = strlen(root); // length of the root string

   // where to copy, from where to start copying, how many to copy
   strncpy(home, home + n ,strlen(home)-1); 

   printf("%s",home);
}

所以我要做的是:

  1. 获取根的长度以了解其结束位置
  2. 通过将 home[n] 中的部分复制到 home[strlen(home)-1] 来覆盖 home 中存储的内容

结果:

/home

关于C strtok() 未正确标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58785546/

相关文章:

c++ - MATLAB代码和C(C++)用IPP代码计算结果的区别

c - 如何在不使用临时节点的情况下在单链表中插入新节点?

c - 我想用c语言将两个不同的结构相乘

java - 检索数组类名

javascript - 数据表 - 2 个不同的 json 源在一起

javascript - 我无法在 javascript 中将对象从字符串解析为对象

c - 打印整数数组的每个连续子序列的总和

java - 将 Java 字节数组转换为 iOS NSData

python - Python 上的正则表达式在使用 char 类时打印垃圾

r - 从具有 H、M、S - R 编程的字符串中分割时间值