我一直在跟踪论坛一个多月了,它解答了我的大部分问题。但我一直在努力克服一个难以解决的问题,我在这里找不到答案(还有其他类似的解决方案,但它并没有解决我的问题)
我试图将我的巨大代码块简化为如下所示:
#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;
答案 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);