st中的strtok和(null)

时间:2013-07-01 11:05:39

标签: c parsing strtok

我正在尝试使用strtok用逗号分隔字符串。这条线看起来像这样:

A:K149, A:N171, A:T172

我正在使用以下代码。

 pch=strtok(line,",");
 printf("%s\n",pch);

        while(pch!=NULL){
        pch=strtok(NULL,", ");        
            printf("%s\n",pch);
        }  

但印刷的是:

A:K149
A:N171
A:T172

(null)

如何摆脱额外的行和最后的(null)?

3 个答案:

答案 0 :(得分:1)

这是因为您在测试之前打印了该行是否为空。

基本上,在循环中测试它是否为null,然后更新值(现在可以为null)然后打印它。所以最后它打印null,测试并看到null然后退出while循环。

试试这个

pch=strtok(line,",");

while(pch!=NULL){
    printf("%s\n",pch);
    pch=strtok(NULL,", ");        
}  

答案 1 :(得分:1)

您只需要在while循环中更改语句的顺序,如下所示: -

while(pch!=NULL){
printf("%s\n",pch);
pch=strtok(NULL,", ");        
}  

您应首先打印该值,然后使用strtok获取下一个字符序列(字符串)。它将确保在打印内容之前检查pch NULL

答案 2 :(得分:0)

while(pch!=NULL){
 printf("%s\n",pch);
        pch=strtok(NULL,", ");        

        }