C4477 – 格式字符串’%s’需要类型’char *’,但是可变参数1的类型为’int’
我一直在跟踪论坛一个多月了,它解答了我的大部分问题。 但是我一直在努力克服一个难题,我无法在这里找到答案(还有其他类似的解决方案,但它并没有解决我的问题)
我试图将我的巨大代码块简化为如下所示的代码块,
#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:’printf’:格式字符串’%s’需要类型为’char *’的参数,但可变参数1的类型为’int’
你对字符串概念有一些误解。
字符串是一个以零结尾的字符数组。 该字符串中的单个char仍为整数类型。
所以string[freqstring]
有整数类型。 这正是错误信息所说的。 由于使用了%s
, printf
需要char*
类型(也就是字符串),但是你给它一个整数类型。
要获取字符串,只需使用string
即ie
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);