如何使用/打破C中的字符串

时间:2017-04-03 00:40:48

标签: c string tokenize

我有一个包含以下模式的字符串:

char *str = "ai/aj/module_mat.mod";

我想选择module_mat作为进一步逻辑的最终字符串。我试图使用rindex(),以便我可以得到字符串的最后部分。但我无法在C中做到这一点。我做错了什么?

我正在尝试的代码是 -

char *first = rindex(str, "/");
char *first = strtok(first, ".");

2 个答案:

答案 0 :(得分:1)

你的错误就在这里:

char *str = "ai/aj/module_mat.mod";

由于str指向常量,因此应该是:

const char *str = "ai/aj/module_mat.mod";

现在你的编译器应该向你展示其他问题。

类似地:

char *first = rindex(str, "/");

由于rindex将指针指向您传递的常量,因此该指针也应为const

char *first = strtok(first, ".");

嗯,strtok的文档说了什么:

  

如果找到分隔符字节,则用空字节覆盖它   终止当前令牌,strtok()保存指向以下字节的指针; ...

所以strtok修改了指针指向的东西,所以传递一个指向常量的指针是!你无法修改常量。

答案 1 :(得分:0)

首先,字符串文字是不可变的,因此将它绑定到可变字符指针是非常危险的。首先修复你的代码:

m

接下来,使用const char* str = "ai/aj/module_mat.mod";

strchr

如果在字符串中找到#include <string.h> const char* p = strchr(str, '/'); if (p != NULL) { ++p; printf("Last part: %s\n", p); } else { printf("No '/' found in string %s.\n", str); } /将指向它,因此p可以用作原始字符串的后缀子字符串,并且&#39; s无需修改原始字符串。我们将p提前一步跳过p,并留下字符串的最后一部分。