字符串末尾的奇怪字符

时间:2014-03-24 15:18:14

标签: c string

我想用' _'填充字符串所以我有

while (i < length) {
  myWord[i] = 95;
  i++;
}

length是用户输入的const int。但是当我输入printf("%s",myWord);时,它的输出是 _ ___ #S&#39 ;或&#39; __ _ _ #&#39;或者有时它的输出是好的。

哪里有问题?谢谢:))

3 个答案:

答案 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 defaultchar数组不会自动以空值终止。

  

如果未终止的字符串被传递给会话,会发生什么   strlen()?未定义的行为。 strlen(),当有这样的野兽时,   将继续搜索内存,直到a)找到一个空字符;或b)   点击导致某种内存保护错误的地址(或   更差)。 strlen(),至少是只读的;所以它不会破坏数据。

http://c2.com/cgi/wiki?NonNullTerminatedString

由于您不知道阵列的大小,更安全的选择是自己弄明白:

int elements_in_x = sizeof(x) / sizeof(x[0]);

对于char的特定情况,由于sizeof(char) == 1sizeof(x)将产生相同的结果。

如果你只有一个指向数组的指针,那么就无法找到指向数组中的元素数。你必须自己跟踪。例如,给定:

char x[10];
char* pointer_to_x = x;

没有办法告诉pointer_to_x它指向一个包含10个元素的数组。你必须自己跟踪这些信息。

相关问题