strtok()strcat()意外的输出

时间:2015-11-25 14:30:39

标签: c

#include "stdio.h"
#include "string.h"

int main(){
    int counter;
    char *token;
    char s[]={"I am John"};
    char con[256];
    token = strtok(s," ");
    while(token != NULL){
        if (counter==0){
            strcat(con,token);
            token = strtok(NULL," ");
            counter++;
        }else{
            strcat(con,token);
            token = strtok(NULL," ");
            strcat(con," ");
        }

    }
    printf("%s\n",con);
    return 0;
}`

printf()的输出是"我是约翰" 我希望输出是"是约翰"

2 个答案:

答案 0 :(得分:3)

counter和数组con未初始化。所以它会导致错误的结果。

答案 1 :(得分:3)

  1. strcat期望第一个参数为空终止,由于其未初始化,因此无法通过声明con来保证。所以strcat的调用是未定义的行为。因此,您的程序是未定义的行为。做

    con[0] = '\0';
    

    解决此问题。

  2. counter未初始化。在表达式中使用它也是未定义的行为。