如何计算C中的字符串数组元素?

时间:2012-08-26 09:15:45

标签: c arrays string for-loop while-loop

我希望我的循环只重复多次,因为很多是“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;
}

3 个答案:

答案 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'charfruits[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;
}