我有一个包含以下模式的字符串:
char *str = "ai/aj/module_mat.mod";
我想选择module_mat作为进一步逻辑的最终字符串。我试图使用rindex(),以便我可以得到字符串的最后部分。但我无法在C中做到这一点。我做错了什么?
我正在尝试的代码是 -
char *first = rindex(str, "/");
char *first = strtok(first, ".");
答案 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
,并留下字符串的最后一部分。