我有一个程序,但是收到错误消息。请帮帮我。
#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);
}
答案 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);
}