【问题标题】:C: warning: format '%s' expects a matching 'char *' argumentC:警告:格式 '%s' 需要匹配的 'char *' 参数
【发布时间】:2013-10-11 11:30:30
【问题描述】:

我目前正在处理文件 I/O,并尝试使用此功能:

fprintf (FILE *pFile, char *pFormat, <variable list>);

我的变量

fprintf ( filePtr, "\"%s\"n", myarray );

我的编译器发出警告,上面写着warning: format '%s' expects a matching 'char *' argument,但我已将myarray 声明为char *myarray = "This is a string"。谁能告诉我出了什么问题?我的代码是:

#include <stdio.h>
int main ()
{
FILE *filePtr;
char *myarray = "This is a string";

if ((filePtr = fopen("sample.dat", "w")) == NULL) {
   printf ("File could not be opened.\n");
} else {
   printf ("This will print the string onto file:\n");

   while (!feof(filePtr)) {
      fprintf ( filePtr, "\"%s\"", myarray );
   }
}
fclose (filePtr);
return 0;
}

【问题讨论】:

  • 没有。显示实际代码。
  • 为什么在格式字符串中使用反斜杠?
  • 向我们展示实际代码。并给我们完整的编译器输出。
  • Krister,他正在尝试打印一个包含在(文字)双引号中的字符串。这没有什么问题。
  • 请注意,您需要在写入模式下fopen() 文件。此外,while 循环将永远不会终止。使用feof() 表示您正在读取而不是写入的文件的结尾。

标签: c pointers file-io printf


【解决方案1】:

我尝试用 gcc 编译,它发现了另一个问题 - fopen 中缺少参数:

 if ((filePtr = fopen("sample.dat")) == NULL) {

所以,需要使用:

 if ((filePtr = fopen("sample.dat", "r")) == NULL) {

此后,代码编译没有问题。 编译器版本:

gcc version 4.2.1 20070831 patched [FreeBSD]

【讨论】:

  • 哦,谢谢,我试过用不同的版本编译它,它也编译得很好。谢谢。
猜你喜欢
  • 2013-05-10
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多