在调用fgets大约20次之后,我遇到了一个段错误 . 我正在打开一个文件(不返回null) . 它的格式为:
num1: value1
num2: value2
num3: value3
然后从文件中读取行,将值存储到数组中,使用nums作为位置 . 以下是seg fault的代码:
编辑:声明myArray和line:
char myArray[3000];
char * line;
char * word;
line = (char *) malloc(100);
word = (char *) malloc(16);
while(fgets(line, 99, file)) {
printf("%s\n", line);
word = strtok(line, " :");
name = (int) strtol(word, NULL, 16);
word = strtok(NULL, " \n");
myArray[name] = word;
}
你会注意到我在收到它后立即打印出来 . 该文件有26行,但它只打印23行然后是seg错误 . 现在,这是我对fgets不完全了解的事情,还是我得到的一些synthax不正确?我已经尝试将更多内存分配给行,或者更多地分配给单词 . 在每次调用strtok之后我都尝试过malloc -ing更多的内存,但似乎没有什么能解决这个错误 .
1 回答
这些问题实际上是你想要做的事情
myArray[name] = word;
.有's some other problems with your code, you'从行
word = (char *) malloc(16);
泄漏内存,因为strtok返回指向最初传递它的字符串的指针 . 你实际上不需要为问题中所写的代码malloc任何东西,所以你可以:word
需要是指针,因为它持有strtok()
的结果你显然不明白指针,你需要先了解它,然后才能理解为什么你的代码没有按照你期望的方式工作 .
如果你说你的代码实际意味着什么,我可以给你一些如何解决它的提示,但目前我还不能确定预期结果是什么 .
编辑:您打算用十六进制读取您的数字吗?
strtol()
的最后一个参数是用于转换的基础...你也可以只使用atoi()
所以你的循环看起来像: