为什么不’;我们不需要循环在C中打印字符串吗?
我不明白为什么我们不在for循环中打印字符串?在正常情况下,我们需要在for循环中打印数组。例如,如果我们想要打印整数数组。它将是这样的:为什么不’;我们不需要循环在C中打印字符串吗?,c,string,pointers,printf,size,C,String,Pointers,Printf,Size,我不明白为什么我们不在for循环中打印字符串?在正常情况下,我们需要在for循环中打印数组。例如,如果我们想要打印整数数组。它将是这样的: int a[n]; for (i = 0; i < n; i++){ printf("%d", a[i]); } 写数组的名称就足够了。 编辑:似乎我没有正确地问我的问题,因为你们中的一些人写了与我的问题无关的答案。我编辑了我的问题。字符串以空字符'\0'结尾,这就是为什么即使不显式地传递其长度,也可以知道字符串何时结束。区别在于C样式的字
int a[n];
for (i = 0; i < n; i++){
printf("%d", a[i]);
}
写数组的名称就足够了。
编辑:似乎我没有正确地问我的问题,因为你们中的一些人写了与我的问题无关的答案。我编辑了我的问题。字符串以空字符
'\0'
结尾,这就是为什么即使不显式地传递其长度,也可以知道字符串何时结束。区别在于C样式的字符串(是字符数组)以零结尾,而int数组通常不以零结尾
理论上,您还可以创建一个以零结尾的int数组,并在循环中打印该数组:
int a[] = {5,7,3,0};
for (i=0;a[i]!=0;i++)
{
printf("%d",a[i])
}
但是,以零结尾的int数组的问题是,数字0可能是一个有意义的值,因此当遇到该值时,您无法确定它是否真的是数组的结尾。但是,对于字符串,0并不表示有意义的值,因此您可以合理地确定已到达字符串的结尾。Y我们的示例远非类似。
%d
表示单个整数,而%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]);
}
(i=0;i{
printf(“%c”,s[i]);
}
这是因为您已经向printf函数提供了参数“%s”,printf函数已经有了一个告诉它如何打印字符串的定义。
希望有帮助。因为C中的字符串以一个特殊字符“\0”结尾,这让程序知道它的结尾。任何优秀的初学者教程都应该涵盖这一点。也许你需要一本更好的书/源或任何你正在使用的资源。就像其他人所说的。如果你在C中,你应该能够键入“man 3 printf”深入阅读printf(及其相关函数)的linux系统。或者,或者。您当然可以这样做,正如下面提供的许多示例所示。调用printf是有代价的。代价在于printf本身。因此,最好只调用printf,尽可能地最小化。您可以尝试逐字符和一起打印一个大字符串,然后比较它们的速度。仍然有一个循环,但它在
printf()内
@subhanceo欢迎您,不过由于您对问题做了一些修改,所以答案没有什么意义。
for (i = 0; i < n; i++){
printf("%c", s[i]);
}