0

我希望我的循环重复多次,因为很多是“水果”数组中的字符串。

首先通过使用“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;
}
4

3 回答 3

4

一种简单的方法是将 NULL 附加到您的列表中:

char *fruits[] = {"Apple", "Grapefruit", "Banana", NULL};

然后你可以像这样打印所有水果:

int i = 0;
while (fruits[i] != NULL) {
    printf ("%s ",*(fruits+i));
    i++;
}

至于为什么你原来的 while 循环失败:

  • i没有增加
  • 您正在检查fruits[i] != '\0'wherefruits[i]是否是指向char并且'\0'等于char0 的指针。因此,您实际上是在检查是否fruits[i]指向 0,但是对于前三个迭代,情况并非如此,因为fruits[i]指向相应水果的第一个字符,而在第四个迭代fruits[i]指向不属于您的程序的内存位置。
于 2012-08-26T09:19:38.597 回答
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;
}
于 2017-03-21T12:38:08.123 回答
-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;
}
于 2016-08-04T13:49:32.327 回答