gpt4 book ai didi

c - 在c中使用动态分配输入字符串列表

转载 作者:行者123 更新时间:2023-11-30 20:32:56 26 4
gpt4 key购买 nike

我正在尝试输入字符串列表。该列表的长度可能会有所不同,因此我尝试使用动态分配。每个字符串最多 20 个字符。该列表以一个点结尾。我已经研究了一段时间了,但我不断遇到段错误,我不知道为什么。我猜错误出在我使用 realloc/malloc 时,但我只是看不出我到底做错了什么。该代码块是一个更大程序的一部分,但我挑出了这个 block 并试图使其工作。它适用于一个单词后跟一个点的“列表”。一旦我尝试读取两个或多个字符串的列表,就会出现段错误。任何帮助都会很棒,谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **resizeDynamicArray(char **arr, int newSize){
char **ptr = realloc(arr, newSize*sizeof(char*));
if (ptr==NULL) {
printf("Error: memory allocation failed.\n");
exit(-1);
}
return ptr;
}

int input (char ***seq){
int len = 0;
char string[21];
*seq=NULL;

do{
scanf("%s", string);
if (string[0] != '.'){
*seq = resizeDynamicArray(*seq, (len+1));
*seq[len] = malloc(sizeof(char[21]));
strcpy((*seq)[len], string);
len++;
}
} while (string[0] != '.');
return len;
}

int main(int argc, char *argv[]) {
int length;
char **words;

length = input(&words);
for (int i=0; i<length; ++i){
printf("%s\n", words[i]);
}
for (int i=0; i<length; ++i){
free(words[i]);
}
free(words);
return 0;
}

最佳答案

更改以下行:

*seq[len] = malloc(sizeof(char[21]));

至:

(*seq)[len] = malloc(sizeof(char[21]));

在索引到顶级数组之前,需要取消引用额外的间接级别。

关于c - 在c中使用动态分配输入字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46735577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com