如何用 / 在 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 前进一位以跳过 / 并留下字符串的最后部分。