strtok() 作为 printf() 中的参数反向打印值
strtok() as a parameter in printf() printing value in reverse
如果你有如下字符串
str="insert 111,name,123456789"
当您将它传递给 strtok 并尝试打印值时,它们会反向输出。
例如:
char* token=strtok(str," ");
printf("%s %s %s %s\n",token,strtok(NULL,","),strtok(NULL,","),strtok(NULL,","));
output: insert 1234567 name 1111
而不是:insert 111 name 123456789
为什么会这样?如何解决?
参数按调用约定顺序被推入堆栈,在您的情况下,这是相反的...因此参数 5 首先计算并推入堆栈,然后是 4、3、2 和格式字符串。
正如之前的许多评论所建议的那样,您的调用方式非常令人沮丧,
应该避免。
如果你有如下字符串
str="insert 111,name,123456789"
当您将它传递给 strtok 并尝试打印值时,它们会反向输出。
例如:
char* token=strtok(str," ");
printf("%s %s %s %s\n",token,strtok(NULL,","),strtok(NULL,","),strtok(NULL,","));
output: insert 1234567 name 1111
而不是:insert 111 name 123456789
为什么会这样?如何解决?
参数按调用约定顺序被推入堆栈,在您的情况下,这是相反的...因此参数 5 首先计算并推入堆栈,然后是 4、3、2 和格式字符串。
正如之前的许多评论所建议的那样,您的调用方式非常令人沮丧, 应该避免。