我希望循环重复的次数与“fruits”数组中的字符串一样多。
首先使用“while”循环进行尝试,但我无法使其正常工作(现在已注释),因为(如调试器所示)它在第四次迭代时出现段错误。此方法应该适用于字符或整数数组,但不适用于字符串数组。为什么会这样?
然后我尝试使用“for”循环,并希望它在达到数组中存储在“count”变量中的字符串元素总数时停止。但是,我找不到一个好的方法来计算数组中字符串的数量。这可能吗? “sizeof”运算符在这里似乎不是一个好的解决方案。
提前感谢您的回复。
#include <stdio.h>
int main()
{
char *fruits[]={"Apple", "Grapefruit", "Banana"};
int i=0;
int count=sizeof(*fruits);
char **bitter=&fruits[1];
printf("Bitter fruit is: %s", *bitter);
puts(" ");
printf("All fruits are: ");
for (;i<count;i++);
{
printf("%s ",*(fruits+i));
}
/*
while ( fruits[i] != '\0')
{
printf("%s ",*(fruits+i));
}
stuff above failed. why?
*/
return 0;
}
最佳答案
一个简单的方法是将 NULL 附加到列表中:
char *fruits[] = {"Apple", "Grapefruit", "Banana", NULL};
然后你可以像这样打印所有水果:
int i = 0;
while (fruits[i] != NULL) {
printf ("%s ",*(fruits+i));
i++;
}
至于为什么你原来的 while 循环失败:
- 你的
i
没有增加 - 您正在检查
fruits[i] != '\0'
是否为fruits[i]
,其中fruits[i]
是指向char
的指针,并且'\0'
是一个等于 0 的char
。因此,您实际上是在检查fruits[i]
是否指向 0,但对于前三个迭代情况并非如此,因为fruits[i]
指向相应水果的第一个字符,而在第四次迭代中fruits[i]
指向一个不存在的内存位置。 t 属于您的程序。
关于c - C语言中如何计算字符串数组元素的个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128934/