-1

好吧,我有一个奇怪的问题printf()。它在屏幕上输出垃圾。我猜这与记忆有关。看一看:

char string1[] = "SAMPLE STRING";
char string2[20]; // some garbage in it

/* let's clear this madness*/
int i = 0;
for (i; i < 20; i++) string2[i] = ' ';   // Space, why not.

printf("output: %s", string2);

输出

output:      ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠SAMPLE STRING
// ten spaces and random characters, why?
4

2 回答 2

8

因为 C 字符串需要 NUL 终止。这意味着您的字符串的最后一个字符必须是'\0'. 这就是printf(以及所有其他 C 字符串函数)知道字符串何时完成的方式。

于 2012-11-26T15:33:05.067 回答
2

string2用空字符完成你的'\0'

string2[19] = '\0';

或者你可以这样做:

for (i; i < 19; i++) string2[i] = ' ';
string2[i] = '\0'; // after the end of the loop i= 19 here
于 2012-11-26T15:32:34.520 回答