错误:'strlen'的冲突类型

时间:2011-04-16 06:41:29

标签: c

我有一个程序,但是收到错误消息。请帮帮我。

#include <stdio.h>
#include <string.h>
int print_strlen(char s[]);

main()
{
    char s[20];
    printf("Enter the string:\n");
    scanf("%s\n", s);
}

int print_strlen(char s[])
{
    int l;
    l = strlen(s);
    printf("Length of the string is: %s\n", l);
}

7 个答案:

答案 0 :(得分:5)

不要试图自己原型strlen。只需包含<string.h>,并使用它已有的原型(和函数)。不要尝试使用相同的名称编写自己的函数(或者至少正式编写以str开头的任何其他名称)。

它现在看到的冲突类型是因为标准要求strlen返回size_t,而不是int

另请注意,您现在命名为strlen的函数是无限递归的 - 它(显然)试图调用标准strlen,它最终会调用自身,并且因为它无条件地执行此操作,它将永远保持递归(或者直到系统因为溢出堆栈而杀死它)。

答案 1 :(得分:1)

strlen已在string.h中定义,因此出错。将您的功能名称更改为其他名称。

答案 2 :(得分:0)

将您的函数调用为其他内容,strlen()中已声明string.h

答案 3 :(得分:0)

strlen是<string.h>中声明的标准函数,您尝试使用另一个原型定义它(标准函数需要char const*,而不是char*

答案 4 :(得分:0)

您的错误消息是什么?

你不应该命名你的函数strlen;已有strlen函数,您知道这不起作用,因为您在strlen函数中使用了真正的strlen函数。称之为其他内容,例如print_strlen。另外,如果您实际上没有从void返回任何内容,请使用int代替print_strlen

其他不直接相关的问题包括明显的缓冲区溢出;如果您输入超过20个字节的文本怎么办?

答案 5 :(得分:0)

strlen是一个在string.h中为你提供的功能,为什么要重新发明轮子?

#include <stdio.h>
#include <string.h>
main()
{
        char s[20];
        printf("Enter the string:\n");
        scanf("%s\n",s);
        printf("Length of the string is: %s\n",strlen(s));
}

会完美无缺。

答案 6 :(得分:-2)

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
 {
     clrscr();
     int i;
     char s[20];
     printf("Enter the string\n");
     scanf("%s",&s);
     i=strlen(s);
     printf("Length of the string is %d",i);
 }