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

时间:2018-03-21 18:39:23

标签: c c89

我对一个非常简单的函数感到生气,因为它读取了输入中给出的字符串数组。 我也知道如何读取字符串并将它们放入数组而不编写适当的函数(在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;
}

1 个答案:

答案 0 :(得分:1)

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

#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;
}