首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个while循环导致分段错误,我该如何防止这种情况发生?

为什么这个while循环导致分段错误,我该如何防止这种情况发生?
EN

Stack Overflow用户
提问于 2019-06-26 00:29:39
回答 1查看 0关注 0票数 0

我在C中编写了一个方法,我尝试从输入文件中读取。我有一定数量的单词我正在阅读,称为numwords。例如,如果我有一个列表,那么:

你好

跳跃

世界

蓝色

1 1

1 2

我只想阅读这些词,而不是后面的整数。对于此输入,我的numwords值来自我程序另一部分的用户输入。

我试图创建一个i在我的readwords()方法中调用的计数器变量,但是我遇到了下面使用的代码的分段错误。我还尝试了一个包含两个条件的while语句:读取输入直到达到EOF,并确保i变量小于numwords。这仍然产生与分段错误相同的结果。我试图通过避免使用任何string.h库或文件i / o方法来挑战自己 - 我只想依赖scanf()于这个实例,因为我试图更好地理解它在数组方面的工作原理。

代码语言:javascript
复制
//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]);
  }
} 

我从这段代码生成的输出如下:

代码语言:javascript
复制
6

hello

jumps

world

is

dog

blue

Segmentation fault

打印出来的价值i正是我想要的 - 我希望它等于numwords。我只是希望能够在没有分段错误的情况下阅读单词。

先感谢您。

EN

回答 1

Stack Overflow用户

发布于 2019-06-26 10:03:26

第二个循环条件是j <= numwords,但应该是j < numwords因为索引是从零开始的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档