c - 末尾带有垃圾字符的字符串数组

标签 c string cstring null-terminated

我有一个字符数组缓冲区,用于存储用户将一一输入的字符。我下面的代码可以工作,但有一些我无法弄清楚的小故障:

  1. 当我执行 printf 来查看 Buffer 中的内容时,它确实填满了,但最后却得到了垃圾字符
  2. 尽管声明为 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!

标签缓冲区是123456789!

最佳答案

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

分配 1 个额外的字符来保存 \0 也是明智之举。

关于c - 末尾带有垃圾字符的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273995/

相关文章:

c - 我正在尝试创建一个在输入\n 后计算行数的程序。我究竟做错了什么?

string - 配置单元转换为日期dd-MM-yyyy

c++ - 组合 std::strings 和 C-Strings 导致缓冲区溢出

c++ - 将 CString 与 sprintf 一起使用

c++ - 在类构造函数中安全地连接 C 字符串

c - 到达时间的 SJF 算法无法正常工作

c - C中没有指定返回类型的函数

c++ - 如何从本地目录加载 C++ 中的图像

python - 在 Python 3 中使用 for 循环查找字符串中的值

c# - 如何在 C# 中获取路径字符串中的倒数第二个目录