c - C 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 指出的那样,当我在整个项目中使用它时(我还没睡,请原谅我),strtok(char * str, char * delimiters)
需要一个分隔符列表。
我实际上想要做的是root
从字符串中删除子home
字符串。
因为它们总是以相同的子字符串开头,所以我可以在结束之后/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
推荐阅读
- facebook-graph-api - 来自 Facebook 图形 API 的广告持续时间
- python - python - django - 赋值前引用的局部变量 django 错误
- php - 无法解析的依赖解析[参数#0 [
类 App\Console\Commands\SyncStages 中的字符串 $itemTypeName]] - kotlin - Camel Quarkus 似乎没有使用 Quarkus 对象映射器
- angular - 如何仅重试幂等方法的失败http请求?
- r - 如何将列的值除以行的多个列值的总和
- php - Gutenberg:如何根据编辑器中的块更改排版选择器大小(编辑器字体大小)?
- kotlin - 桌面版 Kotlin 多平台的 http 请求
- linux - “sudo whoami”和“sudo who am i”有什么区别?
- android - 如何在我的 android 应用程序上在 kotlin 中实现 SearchView?