我需要通过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()
和系列的返回值是否成功 - 不需要将
malloc()
和族的返回值强制转换为C - CCD_ 4在C中被定义为CCD_
- 您也可以考虑使用
strdup()
来获得相同的结果,而不是使用malloc()
和strcpy()
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *names[6] ;
char n[50] ;
int len, i,l=0 ;
char *p ;
for ( i = 0 ; i <= 5 ; i++ )
{
printf ( "nEnter name " ) ;
scanf ( "%s", n ) ;
len = strlen ( n ) ;
p = malloc ( len + 1 ) ;
strcpy ( p, n ) ;
names[i] = p ;
if (l<len)
l=len;
}
for ( i = 0 ; i <= 5 ; i++ )
printf ( "n%s", names[i] ) ;
printf("n MAXIMUM LENGTHn%d",l);
return 0;
}