当前位置:  开发笔记 > 编程语言 > 正文

结束时带有垃圾字符的字符串数组

如何解决《结束时带有垃圾字符的字符串数组》经验,为你挑选了2个好方法。

我有一个char数组缓冲区,我用它来存储用户将逐个输入的字符.我下面的代码有效,但有一些我无法弄清楚的故障:

    当我执行一个printf来查看Buffer中的内容时,它确实填满了但是我最后得到了垃圾字符

    尽管被声明为char Buffer [8],它不会停留在8个字符;

有人可以向我解释发生了什么,也许我可以解决这个问题?谢谢.

char Buffer[8]; //holds the byte stream
int i=0;

if (/* user input event has occurred */) 
{
        Buffer[i] = charInput;
        i++;

        // Display a response to input
        printf("Buffer is %s!\n", Buffer);

}

输出:

tagBuffer is 1??w!
tagBuffer is 12?w!
tagBuffer is 123w!
tagBuffer is 1234!
tagBuffer is 12345!
tagBuffer is 123456=!
tagBuffer is 1234567!
tagBuffer is 12345678!

tagBuffer是123456789!



1> Toon Krijthe..:

您必须以\ 0字符结束字符串.这就是为什么它们被称为零终止字符串.

分配1个额外的char来保持\ 0也是明智的.



2> Jeremy Ruten..:

传递给printf()函数的唯一事情是指向字符串第一个字符的指针.printf()无法知道数组的大小.(它甚至不知道它是否是一个实际的数组,因为指针只是一个内存地址.)

printf()和所有标准c字符串函数假定字符串末尾有一个0.例如,printf()将在内存中保持打印字符,从传递给函数的char开始,直到它达到0.

因此,您应该将代码更改为以下内容:

char Buffer[9]; //holds the byte stream
int i=0;

if( //user input event has occured ) 
{
        Buffer[i] = charInput;
        i++;

        Buffer[i] = 0; // You can also assign the char '\0' to it to get the same result.

        // Display a response to input
        printf("Buffer is %s!\n", Buffer);

}

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有