c - c 中 strtok() 的使用显示警告并返回段错误(核心已转储)

标签 c string char strtok

我正在学习 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/

相关文章:

c - 了解移位和逻辑运算

java - 如何在 java 中创建我们自己的 O(1) 子字符串函数,就像在 jdk 6 中一样。

c++ - gdb 的奇怪行为

C结构;克服将字符串传递给 char

c - C 编程语言中有模板吗?

C - 全局与局部多维数组

c - 文件/程序范围内的二维数组

c++ - Variadic 模板函数名称查找无法找到特化

string - 为什么 SED 回显而不是编辑 : sed '/^;text1/!b;:a;n;//ba;i\text2'

c - 控制语句 'if((i+j) & 1)' 背后的逻辑是什么?