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);
}
所以我做的是:
- 获取根的长度以了解其结束位置
- 通过将部分从
home[n]
复制到 home[strlen(home)-1]
来覆盖存储在主页中的内容
结果:
/home
我已经尝试解决这个问题一段时间了,但我完全不知道如何解决这个问题。我有一个相当大的项目,我无数次使用 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);
}
所以我做的是:
- 获取根的长度以了解其结束位置
- 通过将部分从
home[n]
复制到home[strlen(home)-1]
来覆盖存储在主页中的内容
结果:
/home