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]有整数类型。 这正是错误信息所说的。 由于使用了%sprintf需要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);