C - 读取并分配任意字符串数组

C - Read and allocate an arbitrary array of strings

我对读取输入中给定的字符串数组的一个非常简单的函数很生气。 我也知道如何在不编写适当的函数(将所有内容写入 main() )的情况下读取字符串并将它们放入数组中。 这是我正在使用的示例。

我认为主要的障碍是正确使用三星指针。

#include <stdio.h>
#include <stdlib.h>

int read(char ***a, int *len){
    scanf("%d", len);

    if(*len <= 0) return 1;

    *a = malloc(*len * sizeof(char *));
    if(*a == NULL) return 1;

    for(int i=0; i<*len; i++){
        a[i] = malloc(101 * sizeof(char));
        scanf("%s", *a[i]);
    }
    return 0;
}

int main(){
    int len, i;
    char **A;
    // read an array of strings
    if( read(&A, &len)) return 1;

    // DO SOMETHING

    for(i=0; i<len; i++)
        printf("%s\n", A[i]);

    return 0;
}

您需要注意两件事:运算符优先级和间接级别。如果您不知道哪个运算符的优先级高于另一个,请将您的变量括在括号中:

#include <stdio.h>
#include <stdlib.h>

int read(char ***a, int *len)
{
    scanf("%d", len);

    if (*len <= 0) return 1;

    *a = (char **)malloc(*len * sizeof(char *));
    if (*a == NULL) return 1;

    for (int i = 0; i<*len; i++) {
        (*a)[i] = (char *)malloc(101 * sizeof(char)); // note this line
        scanf("%s", (*a)[i]);
    }
    return 0;
}

int main()
{
    int len, i;
    char **A;
    // read an array of strings
    if (read(&A, &len)) return 1;

    // DO SOMETHING

    for (i = 0; i<len; i++)
        printf("%s\n", A[i]);

    //system("PAUSE");
    return 0;
}