Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408407
  • 博文数量: 51
  • 博客积分: 2030
  • 博客等级: 大尉
  • 技术积分: 1109
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-15 08:11
文章分类

全部博文(51)

文章存档

2022年(1)

2016年(2)

2015年(1)

2014年(2)

2013年(4)

2011年(9)

2010年(2)

2009年(5)

2008年(14)

2007年(11)

我的朋友

分类: C/C++

2008-08-11 11:39:43

这个看似简单的问题,往往容易出错。我初次编写时,编译一次性通过,但运行时总是发生异常。主要问题在与:1、没有给目标串指针变量分配内存。2、为了简练把地址递增写成strSource++的形式。结果输出的是空串,原因在于输出时,指针此时正好指向了字符串的末尾。一下程序在VC6.0下调试通过,可供参考。注释的地方为需要注意的地方
/************************************************************************/
/* author:jychen                                                        */
/* function 字符串拷贝函数                                                */
/*Version:0.0.1                                                         */
/************************************************************************/
#include "stdio.h"
#include "string.h"
#include "malloc.h"
void main()
{
   void StringCopy(const char *strSource, char *strDestination);
   char *strSource={"hello world !"};
   char *strDestination;
   //给strDestination·分配内存空间,否则运行时会有异常发生
   strDestination = (char *) malloc (strlen(strSource) + 1);
   if (strDestination == NULL)
   {
       printf("内存分配失败\n");
       return ;
   }
   StringCopy(strSource, strDestination);
   printf("%s\n",strDestination);
   free(strDestination);
}
void StringCopy(const char *strSource, char *strDestination)
{
   int i=0; //地址计数器
   while(*(strSource+i)!='\0')
   {
     //不能写成 strDestination++的形式,因为strDestination是字符串的首地址
     *(strDestination+i)=*(strSource+i);
     i++;
   }
  *(strDestination+i)='\0';//给拷贝后的字符串加上结束符
}
阅读(3492) | 评论(0) | 转发(0) |
0

上一篇:3G

下一篇:Linux/Unix下Socket编程

给主人留下些什么吧!~~