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

标签 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;
}

这给出了输出:

文字:一些文字 xxxxxxxxxxxxxxxxxxxxx

btext:xxxxxxxxxxxxxxxxxxxxx一些文本

这让我发疯。代码很简单,但我看不懂。 是IDE的bug吗?有人见过这样的事情吗?

最佳答案

你永远不会以 NULL 结尾你的字符串。尝试:

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

在打印字符串之前。

关于c - 在 C 中的 char[] 上使用 printf(%s,...) 的神秘输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970980/

相关文章:

c - 如何发送大小大于 64 KB 的 UDP 数据包

c++ - 如何获得指向字符数组中第一个字符的常量指针?

java - 了解 java 中的二进制、字节流和字符

java - 如何比较两个字符数组,比较同一年表中的字符,但给出一个代表每个可能符号的额外符号?

c - 函数不改变值

c - 它是C中接口(interface)定义的常见方式吗

c - 在数组中写入一个 char *,然后在文件中写入

python - 根据关键字python拆分文本字符串

java - 如何实现 SAX 处理程序的 character() 函数以实现最少的内存使用?

linux - Linux下判断设备是否为触摸屏设备