c编程中的类型不匹配

时间:2017-11-22 12:21:54

标签: c string compiler-errors

#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中的参数错误类型不匹配 参数重新声明中的类型不匹配

2 个答案:

答案 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();
}