在C中的char []上使用printf(%s,...)的神秘输出

时间:2018-04-22 21:37:20

标签: c string char printf

int main()
{
char btext[20];

for(int i=0; i< sizeof(btext); i++)
    {
        btext[i]= 'x' ;
    }

for(int i=0; i< sizeof(btext); i++)
    {
        printf("%c", btext[i]);
    }

printf("\nbtext: %s\n", btext);

return 0;
}

这给出了输出:

XXXXXXXXXXXXXXXXXXXX

btext:xxxxxxxxxxxxxxxxxxxx?

那是哪里?来自?更糟糕的是:

int main()
{
char text[] = "some text";

char btext[20];

printf("text: %s\n", text);

for(int i=0; i< sizeof(btext); i++)
    {
        btext[i]= 'x' ;
    }

for(int i=0; i< sizeof(btext); i++)
    {
        printf("%c", btext[i]);
    }

printf("\nbtext: %s\n", btext);

return 0;
}

这给出了输出:

文字:一些文字 XXXXXXXXXXXXXXXXXXXX

btext:xxxxxxxxxxxxxxxxxxxxsome text

这让我发疯。代码非常简单,但我无法弄清楚。 这是IDE中的错误吗?有没有人见过这样的东西?

1 个答案:

答案 0 :(得分:1)

你永远不会NULL终止你的字符串。尝试:

Btext[sizeof(Btext)-1] = '\0';

在打印出来之前。