【发布时间】:2015-09-29 06:20:52
【问题描述】:
我已经开始学习 c。目前,我正在尝试从两个 char 数组中提取单词,以便可以使用名为 compare 的辅助方法来比较它们。但是,我的 strtok() 给了我奇怪的输出。 这是我的代码:
char *headerPointer=headers;
char *linePointer=firstline;
printf("Header-%s\n",headers);
printf("Line-%s\n",firstline);
headerPointer=strtok(headerPointer,",");
linePointer=strtok(linePointer,",");
while ((headerPointer!=NULL&&linePointer!=NULL)) {
printf("\nPrinting words from headers\n");
printf("%s",headerPointer);
headerPointer=strtok(NULL,",");
printf("\nPrinting words from line\n");
printf("%s",linePointer);
linePointer=strtok(NULL, ",");
}
以上代码产生的输出:
Header-Hello,My,name,is,Ram.
Line-I,own,20,thousand,bucks.
Printing words from headers-
Hello.
Printing words from line-
I.
Printing words from headers-
own.
Printing words from line-
20.
Printing words from headers-
thousand.
Printing words from line-
bucks.
我不明白为什么 header 打印行中的内容以及 my,name,is,ram 去哪里?
我尝试使用以下代码编写它们,并且相同的代码产生了所需的输出。 不同的代码风格:
char *headerPointer=headers;
char *linePointer=firstline;
printf("Header%s\n",headers);
printf("Line%s\n",firstline);
headerPointer=strtok(headerPointer,",");
while(headerPointer!=NULL)
{
printf("\nPrinting words from headers\n");
printf("%s",headerPointer);
headerPointer=strtok(NULL,",");
}
linePointer=strtok(linePointer,",");
while(linePointer!=NULL){
printf("\nPrinting words from line\n");
printf("%s",linePointer);
linePointer=strtok(NULL, ",");
}
输出:
Header-Hello,My,name,is,Ram.
Line-I,own,20,thousand,bucks.
Printing words from headers-
Hello.
Printing words from headers-
My.
Printing words from headers-
name.
Printing words from headers-
is.
Printing words from headers-
Ram.
Printing words from line-
I.
Printing words from line-
own.
Printing words from line-
20.
Printing words from line-
thousand.
Printing words from line-
bucks.
请解释为什么基于相同想法的两个代码会产生不同的结果?我们可以修改第一个代码以给出类似第二个的结果吗?我试图搜索并遵循已经可用的解决方案,但无法走远。
【问题讨论】:
-
我在 C 中使用 XCODE 编译了这段代码
-
strtok一次只能处理一行。要同时解析多行,请使用strtok_r或strsep -
请仔细阅读
strtok手册。strtok一次只能操作一个字符串。因此,为什么您的第一个版本不起作用,而您的第二个版本起作用。如果你想交错解析不同的字符串,请使用strtok_r。
标签: c arrays pointers strtok c-strings