我在C中编写了一个方法,我尝试从输入文件中读取。我有一定数量的单词我正在阅读,称为numwords
。例如,如果我有一个列表,那么:
你好
跳跃
世界
是
狗
蓝色
1 1
1 2
我只想阅读这些词,而不是后面的整数。对于此输入,我的numwords值来自我程序另一部分的用户输入。
我试图创建一个i
在我的readwords()
方法中调用的计数器变量,但是我遇到了下面使用的代码的分段错误。我还尝试了一个包含两个条件的while语句:读取输入直到达到EOF,并确保i
变量小于numwords
。这仍然产生与分段错误相同的结果。我试图通过避免使用任何string.h库或文件i / o方法来挑战自己 - 我只想依赖scanf()
于这个实例,因为我试图更好地理解它在数组方面的工作原理。
//A huge chunk of memory that stores the null-terminated words contiguously
char chunk[MEMSIZE];
//Location of unused memory
char *unused = chunk;
//Points to words that reside inside of chunk
char *wptrs[MAX_WORDS];
/** Total number of words in the dictionary */
int numwords;
void readwords()
{
int i = 0;
while (i < numwords) {
//Read in words and store them in chunk array
scanf("%s", unused);
wptrs[i] = unused;
unused += mystrlen(wptrs[i]) + 1;
++i;
}
printf("%d\n", i);
for (int j = 0; j <= numwords; j++) {
printf("%s\n", wptrs[j]);
}
}
我从这段代码生成的输出如下:
6
hello
jumps
world
is
dog
blue
Segmentation fault
打印出来的价值i
正是我想要的 - 我希望它等于numwords
。我只是希望能够在没有分段错误的情况下阅读单词。
先感谢您。
发布于 2019-06-26 10:03:26
第二个循环条件是j <= numwords
,但应该是j < numwords
因为索引是从零开始的。
https://stackoverflow.com/questions/-100007051
复制相似问题