C4477 - 格式字符串'%s'需要类型' char *',但是可变参数1的类型为' int'

时间:2016-10-01 05:32:50

标签: c

我一直在跟踪论坛一个多月了,它解答了我的大部分问题。但我一直在努力克服一个难以解决的问题,我在这里找不到答案(还有其他类似的解决方案,但它并没有解决我的问题)

我试图将我的巨大代码块简化为如下所示:

#define DATA_ROW 1 /*I have one data per line*/


int freqstring;
char objectstring;
char string[10];
FILE * file;


freqstring = 0;
while (fscanf_s(file, "%s", &objectstring, 8) == DATA_ROW)
{
    string[freqstring] = objectstring;
    freqstring = freqstring + 1;
}

for (freqstring = 0; freqstring < 10; freqstring = freqstring + 1)
{
    printf("%s", string[freqstring]);
}

现在开始学习C编程超过2个月,这是我第一次使用数组。我在输出框中遇到以下错误消息

  

警告C4477:&#39; printf&#39; :格式字符串&#39;%s&#39;需要一个类型为&#39; char *&#39;的参数,但是可变参数1的类型为&#39; int&#39;

1 个答案:

答案 0 :(得分:3)

你对字符串概念有一些误解。

字符串是一个以零结尾的字符数组。该字符串中的单个char仍为整数类型。

所以string[freqstring]有整数类型。这正是错误信息所说的。 printf由于使用char*而需要%s类型(也称为字符串),但是您给它一个整数类型。

要获取字符串,只需使用string,即

printf("%s\n", string);

此外,您似乎遇到扫描问题:

fscanf_s(file, "%s", &objectstring, 8)

您要求输入一个字符串(%s),但objectstring只是一个char。你声称尺寸是8,它不是。使用sizeof代替常量。

您是否真的打算阅读字符,然后使用%c代替%s

如果您想阅读字符,代码可能类似于:

freqstring = 0;
string[freqstring] = '\0';
while ((fscanf_s(file, "%c", &objectstring, sizeof(char)) == 1) &&
       (freqstring < 9))
{
    string[freqstring] = objectstring;
    freqstring = freqstring + 1;
    string[freqstring] = '\0';
}

printf("%s\n", string);