c - 为什么 strtok 会这样改变它的输入?

标签 c strtok

好的,所以我知道 strtok 修改了它的输入参数,但在这种情况下,它只是将输入字符串折叠成第一个标记。为什么会发生这种情况,我该如何解决? (请注意,我不是在谈论变量“temp”,它应该是第一个标记,而是变量“input”,它在调用 strtok 后变成“this”)

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
   char input[]="this is a test of the tokenizor seven";
   char * temp;
   temp=strtok(input," ");
   printf("input: %s\n", input); //input is now just "this"
}

最佳答案

strtok() 找到一个标记时,它会将紧跟在该标记后面的字符更改为 \0,然后返回一个指向该标记的指针。下次您使用 NULL 参数调用它时,它会开始查找终止第一个标记的分隔符——即,在 \0 之后,可能更远。

现在,指向字符串开头的原始指针仍然指向字符串的开头,但第一个标记现在以 \0 结尾——即 printf() 认为 token 的结尾是字符串的结尾。其余数据仍然存在,但 \0 阻止 printf() 显示它。如果您使用 for 循环遍历原始输入字符串直至达到原始字符数,您会发现数据仍然存在。

关于c - 为什么 strtok 会这样改变它的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406475/

相关文章:

C - 这是在以下情况下使用 strtok 的正确方法吗

c - 尝试将文件解析为数组但获得额外的数字

c++ - 试图理解 strtok

c - 从键盘读取单词并将其放入矩阵中

c - 如何有效地从字符列表中提取固定长度的字符串排列?

C 语言 -> 将段落中的单词分开

c - 拆分字符串并存储到数组中(在 C 中)

c - 为什么通过引用调用的函数在从 mex 包装器中的其他源文件链接时不起作用?

c - NEON 寄存器中的添加

c - C三个堆栈并尝试所有选项