我想计算字符串的长度并将字符串复制到另一个而不使用c库函数,但是当我使用fgets()
函数从键盘读取字符串时,代码也没有显示长度的实际值作为目标字符串。我使用fgets()
函数而不是gets()
,因为编译器说gets()
函数是"已弃用"。但是当我将代码中的sizeof(source)
更改为一个整数值假设50
代码工作正常。任何人都可以告诉我这段代码有什么问题,为什么编译器说gets()
函数已被弃用。
这是代码:
#include <stdio.h>
#include <stdlib.h>
int len(char *source);
char *coppy(char *dest,char *source);
int main (void){
char *source,*dest;
source=(char *)malloc(len(source)+1);
printf("enter string:");
fgets(source,sizeof(source),stdin);
if(source[len(source)-1]=='\n'){
source[len(source)-1]='\0';
}
dest=(char *)malloc(len(source)+1);
coppy(dest,source);
printf("dest=%s\n",dest);
printf("length source=%d\n",len(source));
printf("length dest=%d\n",len(dest));
return 0;
}
int len(char *source){
int i=0;
while(*source!='\0'){
source++;
i++;
}
return i;
}
char *coppy(char *dest,char *source){
while(*source!='\0'){
*dest=*source;
source++;
dest++;
}
*dest='\0';
return dest;
}
这是运行该代码时的结果:
enter string:programming dest=pro length source=3 length dest=3
答案 0 :(得分:4)
这是你的第一个错误:
source=(char *)malloc(len(source)+1)
在初始化之前,您将source
传递给函数len
,这是未定义的行为。从此开始,任何事情都可能发生。
第二个错误是您使用fgets
:
fgets(source,sizeof(source),stdin);
fgets
的第二个参数应该是可以写入的字符数,而不是sizeof(source)
。阅读fgets
的文档,并在必要时阅读sizeof
。
答案 1 :(得分:0)
您的错误在于如何为source
source=(char *)malloc(len(source)+1);
您对len(source)
的期望是什么?播放计算机并运行len
功能。我很惊讶你的代码编译并运行。未初始化的len
上的char*
函数应该是未定义的行为。
这就是你的代码失败的原因,你没有分配足够的内存来保存你的输入字符串。