c - C 中字符串数组的类型转换问题

标签 c arrays string casting

我正在尝试从文本文件读取大量英语单词到字符串数组。单词数为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/

相关文章:

javascript - 无法将 json 对象转换为二维数组

arrays - 删除 MongoID 文档中数组的最后一个元素 - Rails

java - 如何在 Eclipse 正则表达式搜索中首先匹配检查前驱?

java - fatal error :1:1: Premature end of file. 读取 url 时出错

c - 将标准输出传递给 C 程序

c - 怎么可能比 (unsigned long long) > LONG_MAX 大?

java - 数组递归

string - 在Delphi中解析包含变量名称的字符串

将 struct 转换为 int

c - 为什么我要写 c - '0' 而不是 c?