自己写的strcpy为什么拷贝输出汉字会乱码呢?

pianzitaiduo 2014-02-25 12:11:01
#include <stdio.h>

char* strcpy1(char* des , const char* src)
{
char* strc = des;
while((*des++ = *src++));
return strc;
}

int main(void)
{
char* strdes = "";
const char* strsrc = "abcdef";
strcpy1(strdes , strsrc);
printf("拷贝后的结果是:%s " , strdes);
return 0;
}
...全文
924 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
谭海燕 2014-02-27
  • 打赏
  • 举报
回复
暂且不说中文乱码问题,你这段拷贝逻辑错的一塌糊涂。
pianzitaiduo 2014-02-27
  • 打赏
  • 举报
回复
主要是汉字出现了乱码,
lm_whales 2014-02-27
  • 打赏
  • 举报
回复
2) 即目标地址的 (源字符串长度+1)个字符以内的,所有位置字符,都和源同一位置的字符相同.
lm_whales 2014-02-27
  • 打赏
  • 举报
回复
strcpy 的前提是(前置条件): 1)目标地址单元( des 所指的)不是只读的,即是可写的. 2)目标地址单元的容量(des 应该是数组)是足够的,可以容纳要拷贝的字符串. 3)源地址单元是个字符串(包括字符串常量). strcpy 的结果是(后置条件) 1)目标地址单元的内容,是和源地址单元一样的字符串. 即目标地址的 等于(源字符串长度+1)个字符的所有位置字符,都和源同一位置的字符相同. 2)返回目标地址单元的地址. PS: 你的strcpy1,写的算是是对的. 你的主程序中,调用strcpy的代码(测试代码?)是错误的 1)常量字符串是不可写的,不满足第一条前置条件. 2)目标地址单元的容量,不能保证内存足够放置源字符串大小的字符串. 不满足第二条前置条件. 3)所以3楼是对的,YTerrenceLau已经给你答案了,你没有采纳. 4)写程序,最好同时写调试代码(主要是加断言) 5)如果,你知道,你写的程序,做什么的,怎样使用,就不会出现这种错误. 所以有人提倡,写代码先写测试. 6)因为你不知道strcpy ,实际做了些什么,逻辑是怎样的,所以测试代码写错了. 所以6楼版主说,拷贝逻辑,错的一塌糊涂。
pianzitaiduo 2014-02-27
  • 打赏
  • 举报
回复
求指教,谢谢@#6
pianzitaiduo 2014-02-25
  • 打赏
  • 举报
回复
问题不在strncpy上面,求解释 ! 谢谢
__cc__ 2014-02-25
  • 打赏
  • 举报
回复
strdes指向的字符常量的位置,你这样做是会崩溃的。
YTerrenceLau 2014-02-25
  • 打赏
  • 举报
回复
char strdes[100];
YTerrenceLau 2014-02-25
  • 打赏
  • 举报
回复
char* strdes[100];

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧