c - C语言中如何计算字符串数组元素的个数?

标签 c arrays string for-loop while-loop

我希望循环重复的次数与“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/

相关文章:

c - 应用于函数的一元 & 运算符的结果

arrays - CUDA:如何在 GPU 中将数组的所有元素相加为一个数字?

java - 字符串数组循环输出多个文本

c - 合并指针字符串时所需的指针操作数

c - IPC 在 Unix 中使用优先级队列?

python - 英国广播公司微:bit - Radio string transfer random carriage returns

ios - 按钮标题文本不清晰

regex - 使正则表达式更具体以排除某些字符的修改

C - 比较整数数组(集合) - 散列或尝试

c++ - 为数组重载运算符<<