繁体   English   中英

在C中将字符串存储在数组中

[英]Storing strings in array in C

我已经阅读了很多有关此问题,并使用它们更改了我的代码并创建了我认为可行的代码。

我认为这是我对C的理解,在这里让我失望,因为我看不到我要去哪里。

我没有编译错误,但是在运行时,我从命令提示符中收到“ FileReader.exe已停止工作”。

我的代码是:

void storeFile(){
int i = 0;
char allWords [45440][25];
    FILE *fp = fopen("fileToOpen.txt", "r");
    while (i <= 45440){
        char buffer[25];
        fgets(buffer, 25, fp);
        printf("The word read into buffer is : %s",buffer);
        strcpy(allWords[i], buffer);
        printf("The word in allWords[%d] is : %s", i, allWords[i]);
        //allWords[i][strlen(allWords[i])-1] = '\0';
        i = i + 1;
    }
    fclose(fp);

}

文件中有45440行,且单词长度不超过25个字符。 我试图将每个单词读入一个名为buffer的char数组中,然后将该缓冲区存储在一个名为allWords的char数组中。

在重构将数组返回到main方法之前,我试图使这一部分正常工作(我觉得这不会是一种有趣的体验)。

您正在尝试在自动存储中分配超过一兆字节(45440 * 25)的数据。 在许多体系结构上,这会导致堆栈溢出甚至导致文件读取代码无法运行。

您可以通过静态分配allWords来解决此问题,如下所示

static char allWords [45440][25];

或动态地像这样:

char (*allWords)[25] = malloc(45440 * sizeof(*allWords));

注意,在fgets的调用中不需要使用buffer ,因为可以使用allWords[i]来代替strcpy

fgets(allWords[i], sizeof(*allWords)-1, fp);

还要注意,关于文件大小的假设是不必要的:您可以继续调用fgets直到它返回NULL为止。 这表明已到达文件末尾,因此可以使用break退出循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM