我已经尝试解决这个问题有一段时间了,但我完全不知道如何解决这个问题。我有一个相当大的项目,我使用 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(char * 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);
}
所以我要做的是:
- 获取根的长度以了解其结束位置
- 通过将
home[n]
中的部分复制到home[strlen(home)-1]
来覆盖 home 中存储的内容
结果:
/home
关于C strtok() 未正确标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58785546/