C strtok() 没有正确标记化?

C strtok() not tokenizing correctly?

我已经尝试解决这个问题一段时间了,但我完全不知道如何解决这个问题。我有一个相当大的项目,我无数次使用 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);

结果二:

h

不应该 return /home 吗?

正如@paxdiablo 所指出的以及我在我的整个项目中都在使用它(我没有睡所以请原谅我),strtok(char * str, char * delimiters) 需要一个分隔符列表。

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

因为它们总是以相同的子字符串 /Users/me/Desktop/my-project 开头,所以我可以在 root 结束后立即找到 home 独有的部分,这可以很容易地完成:

#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]
  3. 来覆盖存储在主页中的内容

结果:

/home