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

3
char *searcharray = malloc(size);
for (i = 0; i < size; i++)
{
  fscanf(filePtr, "%c", searcharray[i]);
}
这是我的代码。每次我都会收到警告信息:
警告:格式“%c”期望类型为'char *'的参数,但参数3的类型为'int'
变量searcharray被确定为int类型了吗?

你正在对字符指针进行解引用。尝试使用指针符号:(searcharray + i) - ciphermagi
@abelebjt %c在scanf中需要一个char*,它“匹配一个由最大字段宽度(默认为1)指定长度的字符序列;下一个指针必须是指向char的指针...” - Adrian Ratnapala
1个回答

11

现状:

  1. searcharray[i] 的类型是 char
  2. 在可变参数函数中,char 类型将会转换为 int

你的错误:

  1. fscanf 希望接收到指向变量的指针来存储数据。
  2. 所以你应该这样做:

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

哇。我从未了解过可变参数的推广。它在哪里规定? - Adrian Ratnapala
@AdrianRatnapala:请参阅C 2011年第6.5.2.2节“函数调用”,第6段。值得注意的是,浮点数也会提升为双精度。这就是为什么printf(“%lf”,...)和printf(“%f”,...)都可以处理双精度的原因。 - Bill Lynch
@AdrianRatnapala:或许这个链接会有所帮助:https://dev59.com/-nM_5IYBdhLWcg3wt1rD - Bill Lynch
非常感谢您的帮助。我一直坐着看着这个问题,尝试找出错在哪里。 - Jacomus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接