我正在尝试从文本文件读取大量英语单词到字符串数组。单词数为2016415,单词最大长度为69个字符。
如果我定义像“char data[2016415][70];”这样的数组,那么当我运行程序时就会出现堆栈溢出。
所以我尝试使用 calloc() 代替,但是我不明白应该如何对其进行类型转换,以便它相当于“char data[2016415][70];”。
以下程序在编译过程中返回“passing arg 1 of `fgets' madepointer from integer without a cast”警告。当我执行它时,它出现“异常:STATUS_ACCESS_VIOLATION”问题。
你能帮我吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char *data; //data[2016415][70];
int i;
FILE *fsol;
fsol = fopen("C:\\Downloads\\abc\\sol2.txt","r");
data = (char*) calloc(2016415,70);
for(i=0;i<2016415;i++){
fgets(data[i] , 70 , fsol);
}
fclose(fsol);
return 0;
}
最佳答案
calloc
只是分配一大片内存,而不是指向其他数组的指针数组。
fgets
需要一个指向它应该转储其内容的内存位置的指针。
因此,您不想给它 data[i]
的内容,而是给它 data[i]
的地址,以便它可以将其内容放在那里。
fgets(&data[i], 70, fsol);
您可能还需要调整循环,使其一次增加 70 多个字符,而不是 1 个。
关于c - C 中字符串数组的类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145408/