在字符串数组中插入字符串

时间:2015-04-14 15:33:44

标签: c arrays string algorithm malloc

我必须在C中的字符串数组中插入字符串。我写了一个函数,但它没有用。你能救我吗?

当我打算打印数组时,程序会崩溃。

由于       

int leggi(char **a, int *len) {
    int i;
    scanf("%d", len);
    if(*len <= 0) return 1;

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

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

int main() {

    int i, n;
    char **A;

    if(leggi(A, &n)) return 1;
    printf("%d\n",n);




    for( i = 0; i < n; i++ ) 
    {
        printf("printf\n");
        printf("%s\n", &A[i]);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

scanf("%s", &a[i])更改为scanf("%s", a[i]),a [i]是指向字符串中第一个字符的指针,获取它的地址只会返回指针的地址,而不是实际的第一个字符。另外需要注意的是,你实际上并没有修改main函数中的指针,只修改了本地函数指针,因此它对main中的指针没有任何影响。 这是编辑后的版本:

int read(char ***a, int *len) {
    int i;
    scanf("%d", len);
    if( *len <= 0 ) return 1;

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

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

int main() {

    int i, n;
    char **A;

    if(read(&A, &n)) return 1;
    printf("%d\n",n);

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