【问题标题】:warning: format '%c' expects argument of type 'char *', but argument 3 has type 'int'警告:格式“%c”需要“char *”类型的参数,但参数 3 的类型为“int”
【发布时间】:2014-04-23 04:24:40
【问题描述】:
char *searcharray = malloc(size);
for (i = 0; i < size; i++)
{
  fscanf(filePtr, "%c", searcharray[i]);
}

这是我的代码。每次我不断收到警告信息:

警告:格式“%c”需要“char *”类型的参数,但参数 3 的类型为“int”

如何将变量 searcharray 确定为 int?

【问题讨论】:

  • 您正在取消引用字符指针。尝试使用指针表示法:(searcharray + i)
  • @abelebjt %c 在 scanf 中需要 char*,它“匹配长度由最大字段宽度指定的字符序列(默认为 1);下一个指针必须是指向 char 的指针, ...”

标签: c


【解决方案1】:

发生了什么:

  1. searcharray[i] 的类型为 char
  2. 在可变参数函数中,char 将提升为 int

你的错误:

  1. fscanf 期望它将放置数据的变量通过指针传递。
  2. 所以你应该这样做:

    fscanf(filePtr, "%c", &searcharray[i]);
    

【讨论】:

  • 哇。我从来没有关于推广可变参数参数的新鲜事。它在哪里指定?
  • @AdrianRatnapala:参见 C 2011,第 6.5.2.2 节函数调用,第 6 段。值得注意的是,花车也被提升为双打。这就是为什么 printf("%lf", ...);和printf("%f", ...) 都处理双打。
  • @AdrianRatnapala:或者这可能会有所帮助:stackoverflow.com/questions/1255775/…
  • 非常感谢您的帮助。我坐在那里盯着这个最长的时间试图找出问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2018-11-03
相关资源
最近更新 更多