c - C中这四种情况如何分别打印出字符串数组中的字符串呢?

标签 c string

我尝试使用这四种表示法来表示字符串数组并测试它们以充分理解它们:

char juices_A[][12]
char *juices_B[]
char (*juices_C)[][12]
char **juices_D

所以我写了这段代码:

#include <stdio.h>

int main() {

    int i_A = 0;
    char juices_A[][12] = { "dragonfruit", "waterberry", "sharonfruit", };
    for (; i_A < 3; i_A++)
        printf("%s;", juices_A[i_A]);
    puts("");

    int i_B=0;
    char *juices_B[] = { "dragonfruit", "waterberry", "sharonfruit", };
    for (; i_B < 3; i_B++)
        printf("%s;", juices_B[i_B]);
    puts("");

    int i_C=0;
    char (*juices_C)[][12] = { "dragonfruit", "waterberry", "sharonfruit", };
    for (; i_C < 3; i_C++)
        printf("%s;", (*juices_C)[i_C]);
    puts("");

    int i_D=0;
    char **juices_D = { "dragonfruit", "waterberry", "sharonfruit", };
    for (; i_D < 3; i_D++)
        printf("%s;", juices_D[i_D]);
    puts("");

    return 0;
}

当我尝试运行代码时,它显示:

dragonfruit;waterberry;sharonfruit;
dragonfruit;waterberry;sharonfruit;
dragonfruit;waterberry;haronfruit;

显然第三和第四种情况有问题,我想知道为什么。此外,我可以使用类似*juice++*juice-- 的东西吗?

最佳答案

int i_C=0;
char (*juices_C)[12] = (char [][12]){ "dragonfruit", "waterberry", "sharonfruit", };
for (; i_C < 3; i_C++)
    printf("%s;", juices_C[i_C]);
puts("");

int i_D=0;
char **juices_D = (char *[]){ "dragonfruit", "waterberry", "sharonfruit", };
for (; i_D < 3; i_D++)
    printf("%s;", juices_D[i_D]);
puts("");

关于c - C中这四种情况如何分别打印出字符串数组中的字符串呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29470419/

相关文章:

c - 尝试构建一个接收 char 数组的函数并查看它是否是有效状态

javascript 字符串到对象

javascript - 为什么数组的索引在下面的代码中是一个字符串?

c - 如何自动查找未使用的#include 指令?

c - 如何通过更改符号以保留方式将数组复制到另一个数组

c - linux c程序中函数strcpy的奇怪段错误

string - 如何在 Haskell 中将整数连接为字符串?

java - 用 | 分割字符串java中的分隔符

python - 删除字符串python中的空格和破折号

c - 如何在两个不同的C程序之间实现同步?