如何用 / 在 C 中断开字符串
How to break a string in C with /
我有一个具有以下模式的字符串:
char *str = "ai/aj/module_mat.mod";
并且我想 select module_mat 作为进一步逻辑的最终字符串。我尝试使用 rindex() 以便我可以获得字符串的最后部分。但我无法在 C 中执行此操作。我做错了什么?
我正在尝试的代码是 -
char *first = rindex(str, "/");
char *first = strtok(first, ".");
你的错误就在这里:
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
的文档怎么说:
If a delimiter byte is found, it is overwritten with a null byte
to terminate the current token, and strtok() saves a pointer to the following byte; ...
所以strtok
修改了指针指向的东西,所以传递一个指向常量的指针是不好的!您不能修改常量。
首先,字符串文字是不可变的,因此将其绑定到可变字符指针是非常危险的。首先修复您的代码:
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
就会指向它,因此p
可以作为原字符串的后缀子串,没有需要修改原来的字符串。我们将 p
前进一位以跳过 /
并留下字符串的最后部分。
我有一个具有以下模式的字符串:
char *str = "ai/aj/module_mat.mod";
并且我想 select module_mat 作为进一步逻辑的最终字符串。我尝试使用 rindex() 以便我可以获得字符串的最后部分。但我无法在 C 中执行此操作。我做错了什么?
我正在尝试的代码是 -
char *first = rindex(str, "/");
char *first = strtok(first, ".");
你的错误就在这里:
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
的文档怎么说:
If a delimiter byte is found, it is overwritten with a null byte to terminate the current token, and strtok() saves a pointer to the following byte; ...
所以strtok
修改了指针指向的东西,所以传递一个指向常量的指针是不好的!您不能修改常量。
首先,字符串文字是不可变的,因此将其绑定到可变字符指针是非常危险的。首先修复您的代码:
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
就会指向它,因此p
可以作为原字符串的后缀子串,没有需要修改原来的字符串。我们将 p
前进一位以跳过 /
并留下字符串的最后部分。