C语言自定义copy函数返回值与原数组不一致问题排查
C语言中从函数更新并返回字符串的常见误解
我是一名学生,刚开始学习动态内存分配技术。最近我需要实现一个类似C标准库<string.h>中strcpy()的字符串copy()函数。
该函数接收两个参数:char c1[]、char c2[]。目前我聚焦于字符串c1长度小于c2的场景,即需要将更长的字符串复制到更短的字符串中,因此需要扩容前者的内存空间。(我已实现一个len()函数用于返回字符串长度,功能正常)
代码如下:
char* copy(char c1[],char c2[]) { int i=0; int lc1=len(c1); int lc2=len(c2); if(lc1<lc2) { //以下两行是否合法? c1=(char*) malloc(lc1*sizeof(char)); c1=(char*) realloc(c1,lc2*sizeof(char)); for(i=0;i<lc2;i++) { *(c1+i)=c2[i]; } *(c1+lc2)='\0'; } return c1; }
我知道这段代码存在多个问题!
我通过以下代码测试:
#include <stdio.h> #include <string.h> #include "mystring.h" main() { int i; char s1[12],s2[12]; gets(s1); gets(s2); printf("copy: %s",copy(s1,s2)); printf("\ns1: %s",s1); }
我期望copy函数的返回值与s1的输出一致,但只有直接打印函数返回值时结果正确,打印s1却无法得到复制后的内容。
我哪里出错了?我认为这与变量作用域、指针或内存分配相关!
编辑:
我还实现了一个替代函数xcopy:
char* xcopy(char c1[]) { int i=0; int lc1=len(c1); char* c2=(char*) malloc((lc1+1)*sizeof(char)); for(i=0;i<lc1;i++) { *(c2+i)=c1[i]; } *(c2+lc1)='\0'; return c2; }
我意识到这个函数并未解决实际问题。
感谢您的帮助!
内容的提问来源于stack exchange,提问作者ameyasr
相关产品推荐
相关产品推荐

