如何通过malloc分配和打印字符数组?

时间:2015-12-19 17:15:48

标签: c arrays pointers char malloc

我需要按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;
}

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

2 个答案:

答案 0 :(得分:2)

正如我所看到的,问题是你一遍又一遍地覆盖同一个位置。这样

  1. 你丢失了以前分配的内存。
  2. 只有最后一个条目仍然存在。
  3. 您需要更改代码

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

    使用循环内的下一个指向指针。

    那就是说,

    • 在使用返回的指针之前,请务必检查malloc()和系列的返回值是否成功。
    • 无需在C中投射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;
}