声明2d字符数组?

问题描述:

是否有可能宣布一个二维数组,像这样:声明2d字符数组?

char words[128][25]; 

,然后只分配给它,像这样:

int i=0; 

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

我已经看到了它的一小段代码,也没有理解这么试了一下,当它试图运行这一行时,从代码块中获取崩溃。当它被声明为这样的数组时,它是一种完全无效的方式吗?它编译好它只是不运行。

+2

请向我们展示一些可编译的代码。 – NPE 2013-03-25 15:58:05

这是使用数组的合法方式;这个问题似乎是在你的同时:

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

你只需要"%s后关闭引号和逗号。

+0

@icepack我刚试过这个,GCC和Clang都没有发出警告,即使是这个'-pedantic -Wall -Wextra'。这对我来说似乎完全有效。 – raptortech97 2013-03-25 16:21:57

+0

对不起,我的坏 - 误读了这个问题 – SomeWittyUsername 2013-03-25 16:25:44

+0

是缺少逗号和==不!=只是我可怜的打字写这个问题!所以它是使用数组的有效方式,这就是我想知道的。 – 2013-03-25 17:48:53

以及什么猛禽解释, 还循环,而你等于EOF .. 这意味着你将永远不会得到“抄袭”,除非该文件是空的.. 你大概的意思是:

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

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

+0

应该注意,当这种情况发生时,'i'将比*成功*扫描字符串的数量大1。 – WhozCraig 2013-03-25 16:06:38

+0

@WhozCraig:谢谢,对我的回答添加了更多解释(或者更确切地说是警告) – Alon 2013-03-25 16:10:34

+1

我可能应该详细阐述。设想一个单词的文件。第一次迭代将把单词读入'words [0]'并将'i'增加到1并且不返回EOF。 * second *迭代将*失败*将单词读入'words [1]'并将'i'增加到2,*然后*返回EOF来打破循环。底线:不管这会怎样*总是以'i'结尾反映1 - 大于成功分析的字符串的实际数量。另一个例子,如果在* empty *文件中调用它,它将会是'1'(我希望这很明显,为什么)。 – WhozCraig 2013-03-25 16:18:08