我想用' _'填充字符串所以我有
while (i < length) {
myWord[i] = 95;
i++;
}
length是用户输入的const int。但是当我输入printf("%s",myWord);
时,它的输出是 _ ___ #S&#39 ;或&#39; __ _ _ #&#39;或者有时它的输出是好的。
哪里有问题?谢谢:))
答案 0 :(得分:2)
String必须以\ 0 char
结尾while (i < length) {
myWord[i] = 95;
i++;
}
myWorkd[i] = 0;
答案 1 :(得分:0)
很可能你忘了用NUL(\0
)字符终止你的字符串。
答案 2 :(得分:0)
允许用户输入字符串的长度容易出错。如果用户输入99999并且长度实际为10,该怎么办?繁荣。未定义的行为。
如果您使用过字符串文字,那就是automatically null-terminated by default。 char
数组不会自动以空值终止。
如果未终止的字符串被传递给会话,会发生什么
strlen()
?未定义的行为。strlen()
,当有这样的野兽时, 将继续搜索内存,直到a)找到一个空字符;或b) 点击导致某种内存保护错误的地址(或 更差)。 strlen(),至少是只读的;所以它不会破坏数据。
http://c2.com/cgi/wiki?NonNullTerminatedString
由于您不知道阵列的大小,更安全的选择是自己弄明白:
int elements_in_x = sizeof(x) / sizeof(x[0]);
对于char的特定情况,由于sizeof(char) == 1
,sizeof(x)
将产生相同的结果。
如果你只有一个指向数组的指针,那么就无法找到指向数组中的元素数。你必须自己跟踪。例如,给定:
char x[10];
char* pointer_to_x = x;
没有办法告诉pointer_to_x
它指向一个包含10个元素的数组。你必须自己跟踪这些信息。