C++ |为什么执行这个程序后我会得到奇怪的字符?

标签 c++ arrays

在向 myString 输入一些字母后,我得到的输出包含与 myString 完全相同的字母,以及一些奇怪的、乱序的字符。 例如,我输入“字母”,输出如下:

字母 ÷ìu ╝■( Bñìu¿☻÷u³■( ʶì ä◄ÿub◄ÿu←öïÜ ÉpB º■( ( ─ ( î¯u Å{N´■   b◄ÿu─[uÉpB ö ( ´pB ÉpB P4å Ç

此外,这些奇怪的字符在不同的输入下显示不同,但在使用相同的输入重建后它们不会改变。

这是我编写的代码:

#include <iostream>
using namespace std;
int main()
{
    constexpr int BUFFER_SIZE = 128;

    char myString[BUFFER_SIZE + 1] = {}; // + 1 for null. Initialize all with null.

    cout << "Enter a string: ";
    fgets(myString, BUFFER_SIZE, stdin);

    int myString_size = sizeof(myString);
    for (int i = 0; i < myString_size; i++) {
        cout << myString[i];
    }
    system("PAUSE");
    return 0;
}

现在,我知道 fgets() 函数会在字母的末尾放置一个换行符 但为什么这些字符仍然出现?

最佳答案

C 字符串的长度等于字符串开头和终止空字符之间的字符数(不包括终止空字符本身)。要获取 C 字符串的长度,请使用:

size_t myString_size = strlen(myString);

然后,循环应该类似于:

for (size_t i = 0; i < myString_size; i++) {
    cout << myString[i];
}

关于C++ |为什么执行这个程序后我会得到奇怪的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52028531/

相关文章:

c++ - 为 iOS 开发人员启动 Qt/C++ 开发 (obj C)

c++ - 使用 Windows 窗体在 Visual Studio C++ 中进行线程绘图

javascript - 如何防止视频阵列播放同一视频两次?

php - 如何在php中显示数组值?

python - 切片 2d numpy 数组

c++ - QSize 与使用 2 Int 有常量

c++ - 为动态分配的整数赋值

模板类的 C++ typedef

arrays - 我如何获得“其他”消息仅打印一次?

python - 使用所需行列表对 numpy 数组进行切片