在向 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/