【发布时间】:2019-07-03 01:53:13
【问题描述】:
最终目标是输出一个文本文件,其中重复的单词被编码为单个数字。我目前遇到的问题是读取单词并将它们存储到一个数组中。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_CODE 120
void main() {
FILE *inputfile = fopen("input.txt","rw");
char buffer[128];
char *token;
char *words[MAX_CODE];
int i = 0;
while(fgets(buffer, 128, inputfile)){
token = strtok(buffer," ");
printf("Token %d was %s",i,token);
while(token != NULL) {
words[i] = malloc(strlen(token)+1);
strcpy(words[i], token);
i++;
token = strtok(buffer," ");
}
}
for(int i = 0; i<3; i++) printf("%d\n%s\n",i,words[i]);
printf("End");
}
我得到的是分段错误错误,或者什么都没有。我想要的是让单词成为一个字符串数组。我正在为每个字符串分配内存,那么我哪里出错了?
【问题讨论】:
-
段错误在哪一行?您是否尝试过找出问题所在?你的输入是什么样的?
-
尝试使用调试器遍历代码。你会看到它死在哪里。
-
gcc 中是否有内置调试器?我正在从命令行运行。
-
我输入的是同目录下的一个txt文件,内容如下:三个单词重复三个单词重复三个
-
token = strtok(buffer," ");可能是NULL,下一行printf("Token %d was %s",i,token);将崩溃。添加检查(token != NULL)或使用token ? token : "NULL"处理它