0

是否可以像这样声明一个二维数组:

char words[128][25];

然后像这样分配给它:

int i=0;

while(fscanf(fp,"%s" words[i++]) != EOF){  
 printf("Copied");
}  

我在一段代码中看到了它,不明白所以试了一下,当它试图运行这一行时,它只是从代码块中崩溃。当它被这样声明时,它是一种完全无效的使用数组的方式吗?它编译得很好,只是不运行。

4

2 回答 2

2

正如猛禽解释的那样,当你等于 EOF 时,你也会循环。这意味着你永远不会得到“复制”,除非文件是空的。你可能的意思是:

while(fscanf(fp,"%s",words[i++]) != EOF){  
 printf("Copied");
}  
  • 编辑:

参考 Whoz 的评论,这是一个危险的代码,如果你的代码的行数多于用单词初始化的行数,那么你会得到一个异常,除此之外,我确实会说明提取的行数(或单词数) (-1)

于 2013-03-25T16:02:50.427 回答
2

这是使用数组的合法方式;问题似乎出在您的时间:

while(fscanf(fp,"%s words[i++]) == EOF){

您只需要在 . 后面加上一个结束引号和逗号"%s

于 2013-03-25T15:59:39.123 回答