我需要按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;
}
打印这些字符串时遇到问题。我不知道怎么弄它们。
答案 0 :(得分:2)
正如我所看到的,问题是你一遍又一遍地覆盖同一个位置。这样
您需要更改代码
p[i]=malloc(l);
strcpy(p[i], bufor);
使用循环内的下一个指向指针。
那就是说,
malloc()
和系列的返回值是否成功。malloc()
及其家庭的返回值。sizeof(char)
在C中定义为1
。无需将大小乘以。strdup()
来获得相同的结果,而不是使用malloc()
和strcpy()
。答案 1 :(得分:0)
#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 LENGTH\n%d",l);
return 0;
}