我对C很陌生,我对这些代码有点麻烦:
char word[STRING_LEN];
while(num_words < ARRAY_SIZE && 1 == fscanf(infile, "%79s", &word))
当我尝试编译时,我收到警告:
format '%s' expects argument of type char *, but argument 3 has type char (*)[80].
现在可以使用&word[0]
来解决这个问题。现在,这两者都不应该指向
数组开头的地址?我在这里错过了什么。
干杯!
答案 0 :(得分:2)
在%s
中使用fscanf
格式时,预期参数为char*
,可以保存从流中读取的字符。这解释了警告信息。
在您的情况下,&word
与&word[0]
具有相同的数值。然而,这并非总是如此。例如,如果您有:
char* word = malloc(20);
然后,数值&word
不等于&word[0]
的数值。编译器没有负责处理这些区别。它只是期望char*
作为参数。