我正在尝试使用 malloc 为字符串数组分配内存。在用户输入之前,每个字符串的大小是未知的,所以这就是我尝试为数组中的每个元素分配内存的方式。
我对代码有一些错误,但无法弄清楚或无法理解它们。我收到有关分配的错误。谁能告诉我这有什么问题?
bool read_strings(char * strings[], int n)
{
int i = 0;
while (i<n)
{
char string[MAX_LENGTH];
if (scanf("%s", string)!=1)
return false;
char* memory= (char*)malloc(sizeof(char)*strlen(string));
if (memory == NULL)
return false;
memory = string;
strings[i] = memory;
i++;
}
return true;
}
多谢!
至少你必须替换
char* memory= (char*)malloc(sizeof(char)*strlen(string));
if (memory == NULL)
return false;
memory = string;
strings[i] = memory;
由
strings[i] = strdup(string)
请注意,使用scanf("%s", string)
读取字符串之间的分隔符是空格
问题就在这里:
char* memory = (char*)malloc(sizeof(char)*strlen(string));
memory = string; <<<
strings[i] = memory;
如果将字符串分配给这样的指针,则会丢失内存。
也:
a) 使用 strcpy() 或 strncpy() 将字符串复制到新分配的内存中,同时请确保您有足够的空间来容纳 NULL 字符