警告:格式指定类型参数类型const char*
我正在读取文件,然后进行排序:警告:格式指定类型参数类型const char*,c,C,我正在读取文件,然后进行排序: 168:35: warning: format specifies type 'char *' but the argument has type 'const char *' [-Wformat] while (fscanf(fp, "%49s", buf[len]) != EOF) ~~~~ ^~~~~~~~ %4
168:35: warning: format specifies type 'char *' but the argument has type 'const char *' [-Wformat]
while (fscanf(fp, "%49s", buf[len]) != EOF)
~~~~ ^~~~~~~~
%49s
提前谢谢
fscanf
将向buf
写入字符。但是,您已将buf
声明为const char[][]
。const
表示它是常量,不应更改。您应该将buf
声明为char[][]
我以前尝试过:168:33:警告:format指定类型“char*”,但参数的类型为“const char*”[-Wformat],而(fscanf(fp,“%s”,buf[len])!=EOF)~~^~~~~~~~~~~%49s并收到相同的警告。如果您甚至没有向我们显示警告的原因,您希望我们如何修复警告。我可以看到它与一些代码相关,但请提供,这样我们就可以使用它来获取上下文。它就是这么说的!函数需要一个char*
,但您给了它一个const char*
。除此之外很难知道,因为你没有提供buf[len]
是可疑的(你的意思只是buf
?),但是编译错误很奇怪,不管怎样,错误消息告诉你,buf[len]
需要可写才能成功调用fscanf()
。您在某处将其定义为constchar*
变量,这意味着无法修改它。(编辑:刚刚看到您添加的代码。您是否尝试过从const char buf[1000][50]
中删除const
?)提示:避免将scanf()
结果与!=EOF
。最好使用while(fscanf(fp,“%49s”,buf[len])==1)
。与您想要的内容进行比较,而不仅仅是许多您不想要的内容中的一项,并使用宽度限制“%s”
。对于更复杂的扫描,差异是很重要的。2天内搞定,这可能是真的。谢谢你,罗布。你怎么这么快就明白了?@Nick\u Nick我对这门语言很有经验。@Nick\u Nick也许他读过错误信息,它告诉你问题出在哪里
FILE *fp = fopen(filename, "r");
int len = 0;
printf("\nSort\n");
const char buf[1000][50];
const char *wordss[1000][50];
while (fscanf(fp, "%s", buf[len]) != EOF)
{
wordss[len][0] = buf[len];
len++;
}
write_buffer_text_file(wordss, len);
read_buffer_text_file();