当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2017-05-10

    本文导语:  #include  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...

#include 

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;
}

|
strcpy 的前提是(前置条件):
1)目标地址单元( des 所指的)不是只读的,即是可写的.
2)目标地址单元的容量(des 应该是数组)是足够的,可以容纳要拷贝的字符串.
3)源地址单元是个字符串(包括字符串常量).
strcpy 的结果是(后置条件)
1)目标地址单元的内容,是和源地址单元一样的字符串.
  即目标地址的 等于(源字符串长度+1)个字符的所有位置字符,都和源同一位置的字符相同.
2)返回目标地址单元的地址.
PS:
 你的strcpy1,写的算是是对的.
 你的主程序中,调用strcpy的代码(测试代码?)是错误的
1)常量字符串是不可写的,不满足第一条前置条件.
2)目标地址单元的容量,不能保证内存足够放置源字符串大小的字符串.
  不满足第二条前置条件.
3)所以3楼是对的,YTerrenceLau已经给你答案了,你没有采纳.
4)写程序,最好同时写调试代码(主要是加断言)
5)如果,你知道,你写的程序,做什么的,怎样使用,就不会出现这种错误.
  所以有人提倡,写代码先写测试.
6)因为你不知道strcpy ,实际做了些什么,逻辑是怎样的,所以测试代码写错了.
  所以6楼版主说,拷贝逻辑,错的一塌糊涂。


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • strcpy和memcpy哪个效率高,提倡用哪个?
  • 深入分析C中不安全的sprintf与strcpy
  • strcpy函数实现简示例命分享
  • Linux 下,我想看 strcpy,strcat的 源代码?
  • 深入理解strcpy与memcpy的区别
  • 自己实现strcpy函数的实现方法
  • 用C++实现strcpy(),返回一个char*类型的深入分析
  • 问个低级的问题:在windows里 有 char * strfilename1 =new char[255];strcpy(strfilename1,"C:\finger2.bmp")的用法,在纯java里怎么写
  • 浅析C++中memset,memcpy,strcpy的区别
  • strcpy函数
  • 求教!写共享内存使用strcpy会出现段错误。用的是LINUX虚拟机
  • C语言中字符串常用函数strcat与strcpy的用法介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,