我正在学习 C 字符串操作并使用 strtok()
函数。我的代码以警告结束,然后输出是段错误。
这是源代码(在文件 token3.c 中):
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "aa.bb.cc.dd.ee.ff";
char *p;
p = strtok(str, '.');
while (p != NULL) {
printf("%s\n", p);
p = strtok(NULL, '.');
}
return 0;
}
编译期间的警告:
token3.c: In function ‘main’:
token3.c:6:15: warning: passing argument 2 of ‘strtok’ makes pointer from integer without a cast [-Wint-conversion]
p=strtok(str,'.');
^~~
In file included from token3.c:2:0:
/usr/include/string.h:335:14: note: expected ‘const char * restrict’ but argument is of type ‘int’
extern char *strtok (char *__restrict __s, const char *__restrict __delim)
^~~~~~
token3.c:9:17: warning: passing argument 2 of ‘strtok’ makes pointer from integer without a cast [-Wint-conversion]
p=strtok(NULL,'.');<br>
^~~
In file included from token3.c:2:0:
/usr/include/string.h:335:14: note: expected ‘const char * restrict’
but argument is of type ‘int’
extern char *strtok (char *__restrict __s, const char *__restrict __delim)
^~~~~~<
预期输出:
aa
bb
cc
dd
ee
ff
实际输出:
Segmentation fault(core dumped)
最佳答案
这是一个错误,只是替换
strtok(str,'.');
与
strtok(str,".");
strtok() 的第二个参数表示分隔符并期望类型
const char *
所以必须用“”括起来。
strtok() 的语法
char *strtok(char *str, const char *delim);
关于c - c 中 strtok() 的使用显示警告并返回段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087571/