我需要通过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()
。