【发布时间】:2019-09-16 10:25:50
【问题描述】:
我正在尝试读取文件并将单词存储到动态字符数组中。现在我遇到了分段错误(核心转储)错误。
我尝试过使用 strdup() 和 strcpy() 仍然遇到同样的错误
char ** array;
int main(int argc, char * argv[]){
int size = 0;
int i;
FILE * file;
char * line;
size_t len;
ssize_t read;
file = fopen("wordsEn.txt", "r");
if(file == NULL){
printf("Error coudl not open wordsEn.txt\n");
return -1;
}
while((read = getline(&line, &len, file)) != -1){
size++;
}
array = (char **) malloc((sizeof(char *) * size));
rewind(file);
i = 0;
while((read = getline(&line, &len, file)) != -1){
//strcpy(array[i], line);
array[i] = strdup(line);
i++;
}
for(i = 0; i < size; i++){
printf("%s", array[i]);
}
}
我期望例如 array[0] 返回字符串 'alphabet'
【问题讨论】:
-
将单词存储到动态字符数组中——这是什么意思?
array[0]是第一个词,array[1]第二个,array[2]第三个,...? -
@Swordfish 是的,array[0] 是第一个单词。
-
请注意,
getline()不是标准 C。 -
如果你有兴趣,我把你的代码的完整修正版本放了
-
line在其地址传递给getline()之前未初始化。 POSIXgetline()函数取消引用它接收到的地址并使用该值来决定如何表现(如果值是NULL它调用malloc(),如果值不是NULL它被假定为返回的缓冲区malloc())。由于line在main()中未初始化,这导致getline()具有未定义的行为。
标签: c file char dynamic-arrays