strtok() 没有返回预期值? [关闭]

问题描述 投票:0回答:1
char str[] = "int\0x,y;\0";
char* token = strtok(str, ",");
while (token != NULL) {
    printf("%s\n", token);
    token = strtok(NULL, ",");
}

在给定的代码中,strtok() 在第一次迭代后为我打印“int”,但如果我将它更改为字符串“double”(代替 int),它会返回 NULL 并且不会进入 while 循环.

尝试更改字符串,并在网络上搜索...

c while-loop c-strings strtok null-pointer
1个回答
0
投票

一旦遇到终止零字符

'\0'
,下一次调用中的函数
strtok
就会返回一个空指针。

所以对于这个代码片段

char str[] = "int\0x,y;\0";
char* token = strtok(str, ",");
while (token != NULL) {
    printf("%s\n", token);
    token = strtok(NULL, ",");
}

在 while 循环中调用

strtok
返回一个空指针。

从函数的角度来看

strtok
它处理一个字符串
"int"
.

如果你像这样改变数组

char str[] = "double\0x,y;\0";

char str[] = "double";

效果将是相同的,而不是字符串

"int"
第一次调用
strtok
将返回一个指向字符串
"double"
.

的指针
© www.soinside.com 2019 - 2024. All rights reserved.