C函数参数
我很不好意思问这样一个问题,但我用C语言编码已经好几年了,坦率地说,这种语言回到我身边的时间比我预期的要长得多 我在代码中收到以下警告:“格式%s要求参数的类型为char*,但参数2的类型为int”,如下所示C函数参数,c,parameters,C,Parameters,我很不好意思问这样一个问题,但我用C语言编码已经好几年了,坦率地说,这种语言回到我身边的时间比我预期的要长得多 我在代码中收到以下警告:“格式%s要求参数的类型为char*,但参数2的类型为int”,如下所示 #include <stdio.h> #define MAXLINE 1000 int getNextLine(char line[], int maxline); void reverse(char line[], int len); main() { int l
#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;
}
#包括
#定义MAXLINE 1000
int getNextLine(字符行[],int maxline);
无效反转(字符行[],整数长度);
main()
{
内伦;
int max;
字符行[MAXLINE];
字符最长[MAXLINE];
max=0;
而((len=getNextLine(line,MAXLINE))>0)
{
反向(直线、透镜);
}
返回0;
}
无效反转(字符行[],整数长度)
{
如果(len==0)
返回;
其他的
{
printf(“%s”,第[len-1]行);
第[len-1]行=“\0”;
//反面(s,len-1);
}
返回;
}
int getNextLine(字符s[],int lim)
{
int c,i;
对于(i=0;i
我不明白的是,它似乎有一些参数?当我把reverse()去掉,使它只接受0个参数并输出一行胡言乱语时,程序编译时不会发出警告。因此,我怀疑这些参数是我的问题。更令人困惑的是,函数getNextLine()具有相同的参数计数和类型,但该函数没有任何问题
谢谢,
Chris这是因为
line[len-1]
不是字符串。line
是字符串,所以尝试printf(“%s”,line)
或printf(“%c”,line[len-1])
而是因为line[len-1]
不是字符串。line
是字符串,所以尝试printf或printf(“%s”,line)
printf[len-1])
相反函数反向
采用字符[]
类型的参数行
,即字符的数组,即字符串,因此:
printf("%s", line[len-1]);
应为(如果要打印单个字符):
或者(如果要打印以null结尾的字符串):
“函数getNextLine
具有相同的参数计数和类型,但此函数没有问题?”
~>编译器给您的错误与printf
有关,它不在其他函数中使用
“我用C编码已经好几年了”
~>旁注:您的代码提醒了旧的ANSI C。距离上次在函数开始时声明所有变量已经很长时间了。函数反向
使用字符[]
类型的参数行
,即字符的数组,即字符串,因此:
printf("%s", line[len-1]);
应为(如果要打印单个字符):
或者(如果要打印以null结尾的字符串):
“函数getNextLine
具有相同的参数计数和类型,但此函数没有问题?”
~>编译器给您的错误与printf
有关,它不在其他函数中使用
“我用C编码已经好几年了”
~>旁注:您的代码提醒了旧的ANSI C。自从上次在函数开头声明所有变量以来,已经有很长时间了。一个字符在C.行[len-1]中有int类型然后转换为int,这正是编译器所抱怨的。看到%s限定符printf函数需要一个指向字符串开头的指针。它随后将打印从指定地址开始的字符,直到遇到\0为止。
如果要打印一个字符,请使用%c并提供一个int(也称为char)。一个字符在c.行[len-1]中具有int类型然后转换为int,这正是编译器所抱怨的。看到%s限定符printf函数需要一个指向字符串开头的指针。它随后将打印从指定地址开始的字符,直到遇到\0为止。
如果要打印一个字符,请使用%c并提供一个int(也称为char).您正在将一个字符传递给printf,它需要一个字符*。您希望printf做什么?它肯定不会反转您的字符串。您正在将一个字符传递给printf,它需要一个字符*。您希望printf做什么?它肯定不会反转您的字符串。我正在一所大学上课,所以我们被告知要做的当然是Y耳朵在曲线后面。谢谢你的建议,让我努力改变我的代码。我在一所大学上课,所以我们被告知要做的当然是在曲线后面几年。谢谢你的建议,让我努力改变我的代码。
printf("%s", line);