我不明白为什么我们不必在for循环中打印字符串?在正常情况下,我们需要在for循环中打印数组。例如,如果我们要打印整数数组。它将是这样的:
int a[n];
for (i = 0; i < n; i++){
printf("%d", a[i]);
}
但是对于像这样的字符串:
char s[100] = " Hello ";
printf("%s\n", s);
足以写出数组的名称。编辑:似乎我没有正确地问我的问题,因为你们中有些人写了与我的问题无关的答案。我编辑我的问题。
字符串以空字符'\0'
终止,这样即使不显式传递其长度,也可以知道字符串何时结束。
不同之处在于,C风格的字符串(为char数组)以零结尾,而int数组通常不以零结尾。
理论上,您也可以创建一个以零结尾的int数组,并在循环中打印该数组:
int a[] = {5,7,3,0};
while (i=0;a[i]!=0;i++)
{
printf("%d",a[i])
}
但是,以零结尾的int数组的问题在于数字0可能是一个有意义的值,因此当您遇到该值时,不能确定它确实是数组的结尾。但是,对于字符串,ASCII-Code 0没有有意义的值,因此可以合理地确定已到达字符串的末尾。
您的示例与之相去甚远。 %d
引用single整数,而%s
引用整个(但仍然是单个)字符串。
您也没有将数组n[]
的大小传递给printf
-而是调用了printf
n
次。您将打印一个int
,就像打印一个字符串一样。
实际的字符串长度未知先验,而是printf
迭代字符串,直到遇到\0
终止符。等效于:
for( int i = 0; s[i] != '\0'; i++)
{
printf( "%c", s[i] ) ;
}
因为
char s[100] = " Hello ";
等效于:
char s[100] = { ' ', 'H', 'e', 'l', 'l', 'o', ' ', '\0' } ;
字符串一次是多个字符。您不能从字符串中请求特定字符。如果要这样做,则必须将其引用为像这样的字符数组]
for (i = 0; i < n; i++){
printf("%c", s[i]);
}