我希望我的循环只重复多次,因为很多是“fruits”数组中的字符串。
首先使用“while”循环尝试它,但是我无法使其正常工作(现在它已被注释),因为(如调试器所示)它在第4次迭代时进行了分段。此方法应该在字符或整数数组中工作,但不能在字符串数组中工作。为什么会这样?
然后我尝试使用“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;
}
答案 0 :(得分:3)
一种简单的方法是在列表中添加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]
是char
指针'\0'
而char
是fruits[i]
等于0.所以您实际上是在检查是否{0}} fruits[i]
指向0但是对于前三次迭代,情况并非如此,因为fruits[i]
指向相应水果的第一个字符,而在第四次迭代中{{1}}指向内存位置不属于您的计划。答案 1 :(得分:0)
#include <stdio.h>
int main()
{
char *fruits[]={"Apple", "Grapefruit", "Banana"};
int i=0;
int count=sizeof(fruits)/sizeof(fruits[0]);
char **bitter=&fruits[1];
printf("Bitter fruit is: %s\n", *bitter);
printf("All fruits are:\n");
for(i=0;i<count;i++)
{
printf("%s\n",fruits[i]);
}
return 0;
}
答案 2 :(得分:-1)
您还可以考虑使用头string.h中的strlen():
#include <stdio.h>
#include <string.h>
int main()
{
char *myarray[] = {"Mere", "Pere", "Gutui"};
int i = 0;
int lungime = strlen(*myarray);
while (i < (lungime - 1)){
printf("Fruit no. %d is %s\n", i, *(myarray + i));
i++;
}
return 0;
}