我需要通过malloc()分配字符数组,然后打印它们。

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


int main (void){
    int i, n, l;
    char **p;
    char bufor[100];
    printf("Number of strings: ");
    scanf("%d", &n);
    p=(char**)malloc(n*sizeof(char*));
    getchar();
    for (i=0; i<n; ++i){
        printf("Enter %d. string: ", i+1);
        fgets(bufor, 100, stdin);
        l=strlen(bufor)+1;
        *p=(char*)malloc(l*sizeof(char));
        strcpy(*p, bufor);
    }
    for (i=0; i<n; ++i){
        printf("%d. string is: %s", i+1, *(p+i));
    }

    return 0;
}

我打印这些字符串有问题我不知道怎么弄到它们。

最佳答案

问题是,正如我所见,你一次又一次地覆盖同一个位置这种方式
您正在丢失以前分配的内存。
只有最后一个条目仍然存在。
你需要改变你的代码

    p[i]=malloc(l);
    strcpy(p[i], bufor);

在循环中使用指向指针的下一个指针。
也就是说,
在使用返回的指针之前,请始终检查malloc()的返回值和family是否成功。
不需要在C中计算malloc()和family的返回值。
sizeof(char)在C中定义为1。无需将大小与之相乘。
您也可以考虑使用malloc()来实现相同的结果,而不是使用strcpy()strdup()

09-10 01:00
查看更多