A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiangenhao 中级黑马   /  2014-4-25 22:57  /  1505 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jiangenhao 于 2014-4-26 01:07 编辑
  1. char * strcpy2 ( char * str1, const char *str2)

  2. {
  3.     char * cp = str1;
  4.     while (*str1 != '\0')
  5.     {
  6.         * str1 = * str2;
  7.         * str1++;
  8.         * str2++;
  9.    
  10.         
  11.     }
  12. //   *str1 = '\0';
  13.     return cp;

  14. }

  15. #include <stdio.h>

  16. int main(int argc, const char * argv[])
  17. {

  18.    char a[] = "sahghag";
  19.     char b[] = "welcome to beijing!";
  20.     char * result = strcpy2(a,b);
  21.   //  printf("%s\n",result);
  22.     printf("%s\n",a);
  23.     return 0;
  24. }
复制代码

为什么结果是welcome呢 空格也算'\0'吗

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
char a[] = "sahghag";
这个长度是固定不所以结果是welcome
回复 使用道具 举报
代码第5行:while (*str1 != '\0') 这个条件语句限制了拷贝到a[]字符串的长度,就是说当while判断到a[]中的尾0时,就跳出循环了,所以a[]只能从b[]中拷贝到‘e’前面的数据。所以说和b[]中的空格没关系。
回复 使用道具 举报 1 0
char * strcpy2 ( char * str1, const char *str2)

{
    char * cp = str1;
int length=0;
length=strlen(str2);   // 用str2的长度
    while (length>0)
    {
        * str1 = * str2;
        * str1++;
        * str2++;
--length;

    }
//   *str1 = '\0';
    return cp;

}

#include <stdio.h>

int main(int argc, const char * argv[])
{

   char a[] = "sahghag";
    char b[] = "welcome to beijing!";
    char * result = strcpy2(a,b);
  //  printf("%s\n",result);
    printf("%s\n",a);
    return 0;
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
这个只能说是巧合,因为你定义的字符数组a的长度和字符数组b中welcome的长度相等,所以当调用你自己写的strcpy的函数时while的循环在判断*str1是否等于\0时不成立便退出循环。一退出循环便只能复制welcome这段字符串了。如果你将字符数组b写成we come,这时字符数组有空格了,那你调用自己的函数之后结果仍然是与字符数组a等长的那一部分是we come。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
谢谢 大家 看懂了 是字符串1长度的问题
回复 使用道具 举报
gaoxinglei123 来自手机 中级黑马 2014-4-26 07:50:24
7#
你检测的是第一个字符串str1里面的结束符。所以第二个字符串只能复制和第一个字符串一样的长度。所以是welcome
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马