像往常一样,我在这里阅读了很多帖子。我发现了一篇关于总线错误的特别有用的帖子,请参见此处。我的问题是我无法理解为什么我的特定代码给了我一个错误。
我的代码是尝试自学 C。它是对我学习 Java 时制作的游戏的修改。我的游戏目标是获取一个 5049 x 1 的巨大文字文件。随机选择一个单词,将其混杂并尝试猜测它。我知道如何做到这一切。所以无论如何,文本文件的每一行都包含一个单词,例如:
5049
must
lean
better
program
now
...
所以,我在 C 中创建了一个字符串数组,尝试读取这个字符串数组并将其放入 C 中。我没有做任何其他事情。一旦我将文件放入 C 中,其余的应该很容易。更奇怪的是它符合要求。当我用./blah
命令运行它时,我的问题就来了。
我得到的错误很简单。它说:
zsh: bus error ./blah
我的代码如下。我怀疑这可能与内存或缓冲区溢出有关,但这是完全不科学和直觉的。所以我的问题很简单,为什么这个 C 代码会给我这个总线错误消息?
#include<stdio.h>
#include<stdlib.h>
//Preprocessed Functions
void jumblegame();
void readFile(char* [], int);
int main(int argc, char* argv[])
{
jumblegame();
}
void jumblegame()
{
//Load File
int x = 5049; //Rows
int y = 256; //Colums
char* words[x];
readFile(words,x);
//Define score variables
int totalScore = 0;
int currentScore = 0;
//Repeatedly pick a random work, randomly jumble it, and let the user guess what it is
}
void readFile(char* array[5049], int x)
{
char line[256]; //This is to to grab each string in the file and put it in a line.
FILE *file;
file = fopen("words.txt","r");
//Check to make sure file can open
if(file == NULL)
{
printf("Error: File does not open.");
exit(1);
}
//Otherwise, read file into array
else
{
while(!feof(file))//The file will loop until end of file
{
if((fgets(line,256,file))!= NULL)//If the line isn't empty
{
array[x] = fgets(line,256,file);//store string in line x of array
x++; //Increment to the next line
}
}
}
}