字符串的动态内存分配和该字符串在 char 数组中的位置

Dynamic memory allocation of string and placement of this string in a char array

我想要一个字符串数组,并且用户一次输入一个字符串。如果数组已满或用户跳过输入(因此字符串将等于“\n”),程序应该结束。 问题是我必须为这些字符串中的每一个动态分配内存,但我找不到有效的方法。

请原谅我的英语问题,但该数组应该是指向 char 的指针数组(例如 char *pin[MAX]) 这是我的代码:

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#define MAX 5

int main()
{
   char *pin[MAX];

   char s[] = "";
   int n = 0;

   while(s != "\n"){

       printf("Enter a string: ");
       gets(s);

       pin[n] = malloc(sizeof(char)*strlen(s));
       strcpy(pin[n], s);

       n++;
       if(n = MAX - 1) break;
   }

   for(int i = 0; i < MAX; i++){
       printf("%s ", *pin[i]);
   }
   return 0;
}


  • 使用 fgets 获取输入并将其存储在临时缓冲区中(128 或 256 字节大等)。
  • 对存储在此缓冲区中的读取字符串调用 strlen 以查看要分配多少。
  • 使用 malloc 为指针 pin[n]strcpy 那里的字符串分配内存。

注意:

  • char *s; ... while(s != 是废话,因为 s 尚未初始化。
  • s != "\n" 是无稽之谈,因为这不是你在 C 中比较字符串的方式。
  • pin[n] == &s; 是无稽之谈,因为它只是随机输入的东西,程序员不知道为什么。通过反复试验编程是行不通的。
  • 一般先学数组和指针再学字符串