【发布时间】:2019-02-01 08:31:56
【问题描述】:
在向myString 输入一些字母后,我得到一个输出,其中包含与myString 完全相同的字母以及一些奇怪的乱码字符。
例如,我输入 "letters",我得到的输出如下:
字母 ÷ì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() 函数会在 letters 末尾放置一个换行符 但是为什么这些字符仍然出现?
【问题讨论】:
-
一个简单的提示:sizeof 不是返回字符串的长度
-
...反正你也不能走过去。
-
所以@gogaz sizeof 实际返回的值是 128,对吗?
-
@FeritYiğitBALABAN no sizeof 返回数据类型的字节数。
-
@gogaz 它返回数组的大小,而不是 c 样式字符串的长度。 OP 应使用
strlen()而不是sizeof()来确定输入的所有字符的大小。