黑马程序员技术交流社区
标题:
重写strcpy函数 遇见问题
[打印本页]
作者:
jiangenhao
时间:
2014-4-25 22:57
标题:
重写strcpy函数 遇见问题
本帖最后由 jiangenhao 于 2014-4-26 01:07 编辑
char * strcpy2 ( char * str1, const char *str2)
{
char * cp = str1;
while (*str1 != '\0')
{
* str1 = * str2;
* str1++;
* str2++;
}
// *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;
}
复制代码
为什么结果是welcome呢 空格也算'\0'吗
作者:
gmadong@163.com
时间:
2014-4-25 23:05
char a[] = "sahghag";
这个长度是固定不所以结果是welcome
作者:
allen405
时间:
2014-4-25 23:42
代码第5行:while (*str1 != '\0') 这个条件语句限制了拷贝到a[]字符串的长度,就是说当while判断到a[]中的尾0时,就跳出循环了,所以a[]只能从b[]中拷贝到‘e’前面的数据。所以说和b[]中的空格没关系。
作者:
blz01003hm
时间:
2014-4-25 23:49
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;
}
作者:
Freedam
时间:
2014-4-26 00:02
这个只能说是巧合,因为你定义的字符数组a的长度和字符数组b中welcome的长度相等,所以当调用你自己写的strcpy的函数时while的循环在判断*str1是否等于\0时不成立便退出循环。一退出循环便只能复制welcome这段字符串了。如果你将字符数组b写成we come,这时字符数组有空格了,那你调用自己的函数之后结果仍然是与字符数组a等长的那一部分是we come。
作者:
jiangenhao
时间:
2014-4-26 01:07
谢谢 大家 看懂了 是字符串1长度的问题
作者:
gaoxinglei123
时间:
2014-4-26 07:50
你检测的是第一个字符串str1里面的结束符。所以第二个字符串只能复制和第一个字符串一样的长度。所以是welcome
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2