c-如何通过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;
}

我打印那些字符串有问题。我不知道如何得到它们。

正如我所看到的,问题是你一次又一次地覆盖同一个位置。这种方式

  1. 您正在丢失以前分配的内存
  2. 只有最后一个条目仍然存在

你需要像一样更改代码

    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;
}

相关内容

  • 没有找到相关文章

最新更新