grubbysfans 2015-01-31 16:00 采纳率: 0%
浏览 1913

实现自己的strcpy函数是遇到的问题

最近在看 C和指针 在做第9章第3个编程题时,遇到了一个奇怪的问题,原题如下
编写一个名叫my_strcpy的函数,它类似于strcpy函数,但它不会溢出目标数组。复制的结果必须是一个真正的字符串。

我在centos上编写了程序:
 #include <stdio.h>

char *my_strcpy(char *buff, const char *str, int buffLen)
{
    char *temp = buff;

    while ((temp < buff + buffLen) &&  (*str != '\0'))
    {
            *(temp++) = *(str++);
    }
    *(temp) = '\0';

        return buff;
}

int main(int argc, char **argv)
{
    char buff[10];
    const char *str = "hello world";
    printf("%p\n", str);

    my_strcpy(buff, str, 10);
      printf("%p\n", str);
    printf("buff:%s\nstr:%s\n", buff, str);
    printf("length of buff is : %d\n", strlen(buff));

    getchar();

    return 0;
}

运行时发现str的地址发生了改变, 打印信息如下:
0x80485a4
0x8048500
buff:hello worl
str:
length of buff is : 10

有高手能告诉我为什么上str的地址会发生改变吗?非常感谢。

  • 写回答

4条回答 默认 最新

  • wangyu18672293959 2015-01-31 17:10
    关注

    图片说明
    1.好像是一样的,我运行几遍你的代码都没错
    2. 字符串复制函数中的两个参数必须保证,前一个参数能够有足够的空间装下后一个参数复制过来的内容,你的程序中buff[10],不能够装下“hello world”共12字符。
    3.对于字符串复制函数,有种写法供你参考

     char*strcmp_1(char *p,char*q)
     {
         char*pr=p;
            while(*pr++=*q++);
    
          *pr='\0';
                return p;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置