我们为什么不需要循环才能在C语言中打印字符串?

问题描述 投票:0回答:4

我不明白为什么我们不必在for循环中打印字符串?在正常情况下,我们需要在for循环中打印数组。例如,如果我们要打印整数数组。它将是这样的:

int a[n];

for (i = 0; i < n; i++){
    printf("%d", a[i]);
}

但是对于像这样的字符串:

char s[100] = " Hello ";
printf("%s\n", s);

足以写出数组的名称。编辑:似乎我没有正确地问我的问题,因为你们中有些人写了与我的问题无关的答案。我编辑我的问题。

c string pointers printf size
4个回答
2
投票

字符串以空字符'\0'终止,这样即使不显式传递其长度,也可以知道字符串何时结束。


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没有有意义的值,因此可以合理地确定已到达字符串的末尾。


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' } ;

0
投票

字符串一次是多个字符。您不能从字符串中请求特定字符。如果要这样做,则必须将其引用为像这样的字符数组]

for (i = 0; i < n; i++){
     printf("%c", s[i]);
}
© www.soinside.com 2019 - 2024. All rights reserved.