strtok()函数在C中工作不正常

strtok()函数在C中工作不正常,c,gcc,strtok,C,Gcc,Strtok,我使用以下代码在C语言的循环中应用了strtok(): printf("%s",line); printf("%d %d %d\n",atoi(strtok(line," ")),atoi(strtok(NULL," ")),atoi(strtok(NULL," ")) ); 输出为: 103 70 105 150 103 0 0 115 17 127 21 115 127 17 10 108 105 97 10 105 8 13 122 43 8 13 43 122 50 1

我使用以下代码在C语言的循环中应用了
strtok()

printf("%s",line);
printf("%d %d %d\n",atoi(strtok(line," ")),atoi(strtok(NULL," ")),atoi(strtok(NULL," ")) );
输出为:

103 70 105 150

103 0 0

115 17 127 21

115 127 17

10 108 105 97

10 105 8

13 122 43 8

13 43 122

50 187 35 71

50 35 187
奇数行表示使用
strtok()
后的行和偶数行

我不知道为什么我没有把每个数字分开


i、 e在
103 70 105 150
中,我需要所有数字以偶数行分隔。

在您的情况下,printf参数的计算顺序与您想象的相反。事实上,参数的求值顺序在C中没有严格定义,因此您应该将代码重新排列为:

printf("%d ",atoi(strtok(line," ")));
printf("%d ",atoi(strtok(NULL," ")));
printf("%d\n",atoi(strtok(NULL," ")));

您不会编写依赖于函数参数求值顺序的程序。此外,在将strtok的结果传递给atoi()之前,您需要检查它的结果。如果您将NULL传递给atoi(),您的程序将停止并着火。最好在。。。六羟甲基三聚氰胺六甲醚。。。9项单独声明