相同的C代码表现不同

时间:2017-05-01 03:51:46

标签: c

我宣布一个空字符串:

char str[MAX_LEN] = "\0"; //empty String

然后

void InitString(char *str,int maxlenght)
{

    char input = 0;
    int counter = 0,i;
    for(i = 0;i<(maxlenght);i++)
    {
        *(str+i) = '\0';
    }
    getchar();
    printf("\nEnter new string of max %d chars:  ",maxlenght);
    while (input != '\r' && counter < (maxlenght-1))
     {
        input = getche();
        *(str+counter) = input;
        counter++;
    }
}

void PrintString(char *str)
{

    int i = 0;
    printf("\nThe String Created is :  ");
    puts(str);
    while(*(str+i) != '\0')
    {
          printf("%c", *(str+i));
        i++;
    }
}

我不知道为什么这段代码的行为不同,因为代码在逻辑上与上层代码相同。

int  CountWords(char *str)
{


    int i = 0;
    char ch;
    while(*(str+i) != '\0')
    {
          printf("%d", *(str+i));
         ch = *(str+i);
         printf("%c",ch);
         numNumber++;
        i++;
    }
    return i;
}

即使测试条件相同,下部代码块也没有输出。

1 个答案:

答案 0 :(得分:1)

您的问题是您使用的是puts()This个州

  

C库函数int puts(const char * str)将字符串写入stdout,但不包括空字符。换行符附加一个换行符。

因此,如果puts()使用strlen(),那么您的'\0'会被'\n'取代,这就是您的while循环无效的原因。