gpt4 book ai didi

c - 在 C 中从文件读取大数(例如 e 和 pi)到数组

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

我有一个名为 pi.txt 的文件,正如您可能想象的那样,其中包含 pi 的数字。

格式是这样的

第 1 行:3。
第二行:14159265358979323846264338327950288419716939937510
第三行:58209749445923078164062862089986280348253421170679

并且继续

第20001行:56787961303311646283996346460422090106105779458151

减去 3.(3.14xxxxxx...)有 1020001 个数字

我必须将此文件读取到一个数组(不是二维数组。如果我像我想象的那样使用二维数组,我以后想做的事情会变得更加困难)。这是我的代码:

void fpi();
char **arraypi;

int main(int argc, char *argv[]) {
fpi();
int i;
while (i<=10){
printf("%d", arraypi[i++]);}
return 0;
}


void fpi(){
char pi[1020001];
arraypi = malloc(1020001 * sizeof(int));
FILE *file;
int i=0;
file = fopen("pi.txt", "r");
if (file == NULL){
printf("The file cannot be opened.\n");
exit(1);
}
while (fscanf(file, "%c", &pi)==1){
strcpy(arraypi[i++], pi);
}
fclose(file);
}

我遇到了段错误,但我不明白为什么。我确定这与我正在使用的指针和 fscanf 有关。

最佳答案

strcpy 希望您提供一个以 null 结尾的字符数组(字符串),并且您提供了一个包含 1020001 个字符的数组,其中除了从文件中读取的第一个字符之外,其他所有字符都未确定.

char pi[1020001];
while (fscanf(file, "%c", &pi)==1){ // only one character gets copied to pi
strcpy(arraypi[i++], pi); // strcpy will expect pi to be a string and not just a char
}

因此,它可能会陷入无限循环,写入超出为其分配的允许内存,从而破坏堆栈结构,从而导致段错误。当您执行此操作时,您还会遇到未定义的行为。

关于c - 在 C 中从文件读取大数(例如 e 和 pi)到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133939/

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