我很尴尬地问了这样一个问题,但我已经多年没有用C编写代码了,坦率地说,这门语言花了比我预期的更长的时间才回到我的脑海中。
在我的代码中,我得到了以下警告:"format %s需要char *类型的参数,但参数2具有int类型“,如下所示。
#include <stdio.h>
#define MAXLINE 1000
int getNextLine(char line[], int maxline);
void reverse(char line[], int len);
main()
{
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while ((len = getNextLine(line, MAXLINE)) > 0)
{
reverse(line, len);
}
return 0;
}
void reverse(char line[], int len)
{
if (len == 0)
return;
else
{
printf("%s",line[len-1]);
line[len-1] = '\0';
//reverse(s,len-1);
}
return;
}
int getNextLine(char s[], int lim)
{
int c, i;
for (i=0; i < lim-1 && (c=getchar()) != EOF && c!='\n'; i++)
s[i] = c;
if (c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
} 我不明白的是,这似乎与参数有关?当我剥离reverse(),使其接受0个参数并只打印出一行胡言乱语时,程序编译时没有任何警告。因此,我怀疑参数是我的问题。更令人困惑的是,函数getNextLine()具有相同的参数计数和类型,而这个函数却没有问题?
谢谢,克里斯
发布于 2013-09-30 05:55:14
这是因为line[len-1]不是字符串。line是字符串,所以请尝试使用printf("%s" , line)或printf("%c" , line[len-1])
发布于 2013-09-30 05:57:28
函数reverse接受类型为char[]的参数line,即char数组,即string,因此:
printf("%s", line[len-1]);应为(如果要打印单个字符):
printf("%c", line[len-1]);或者(如果您想打印以null结尾的字符串):
printf("%s", line);函数getNextLine具有相同的参数计数和类型,但此函数没有问题?
~>编译器给出的错误与printf有关,其他函数中没有使用该错误。
“我已经好几年没有用C编写代码了。”
~>旁注:您的代码让人想起了旧的ANSI。自从上一次必须在函数开头声明所有变量以来,已经很长时间了。
发布于 2013-09-30 06:02:09
一个字符在C中有一个int类型,linelen-1然后转换成int,这就是编译器所抱怨的。看到%s限定符printf函数需要一个指向字符串开头的指针。然后,它将从指定地址开始打印字符,直到遇到\0为止。如果要打印一个字符,请使用%c并提供一个int (也称为char)。
https://stackoverflow.com/questions/19083713
复制相似问题