#include<stdio.h>
#include<conio.h>
#include<string.h>
void printlength(char a);
void printlength(char a)
{
int len = strlen(a);
printf("The Length of the String %s is %d ", a, len);
getch();
}
void main()
{
char a[25];
clrscr();
printf("Enter the name");
scanf("%s", &a);
printlength(a);
}
我刚刚开始学习c并陷入这些错误。 我得到了错误
c和c中的参数错误类型不匹配 参数重新声明中的类型不匹配
答案 0 :(得分:2)
我可以立即看到一个问题:
printf("The Length of the String %s is %d ",a,len);
%s
与字符串一起使用,您传递的是char
。
而且,我可以看到
printlength(a);
此处a
是一个char数组,因此,您需要更改为
void printlength(char *a)
另外,您必须在&
中删除a
scanf()
,并避免缓冲区溢出,请使用
scanf("%24s",a);
C编程中的教科书非常适合开始,并且还要看一下编译器为您提供的警告,这些是针对某些事情而不是避免。
答案 1 :(得分:0)
对于根据C标准的初学者,不带参数的函数main
应声明为
int main( void )
格式说明符%s
需要char *
类型的参数。因此,scanf
调用的语句应至少写成
scanf("%s", a);
^^^
虽然编写
更安全scanf("%24s", a);
假设函数printlength
处理字符串。因此,考虑到函数中未改变指向数据,其参数应声明为
void printlength( const char *a );
^^^^^^^^^^^^^
标准函数strlen
的返回类型为size_t
。因此,变量len应声明为具有类型size_t
。
所以在函数中应该有
size_t len = strlen(a);
printf("The Length of the String %s is %zu\n", a, len);
最好在main中调用非标准函数getch
。
int main( void )
{
//...
getch();
}