gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:03:23 24 4
gpt4 key购买 nike

好的,所以我知道 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()找到一个token时,它会将紧随该token后面的字符更改为\0,然后返回一个指向该token的指针。下次您使用 NULL 参数调用它时,它会开始查找终止第一个标记的分隔符 - 即在 \0 之后,甚至可能更远。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com