动态数组的使用之char *res=new char(strlen(src)+1)

动态数组的使用:

    通常因为在编译时无法知道数组的维数,所以才需要动态创建该数组。例如,在程序执行过程中,常常使用char *指针指向多个C风格字符串,于是必须根据每个字符串的长度实时地动态分配存储空间。采用这种技术要比建立固定大小的数组安全。如果程序员能够准确计算出运行时需要的数组长度,就不必再担心数组变量具

有固定的长度而造成的溢出问题。


 

关于动态数组的使用我们举一个例子:
    比如,希望把字符串复制到另一个字符中。我在这里再次强调,尽管C++中使用的是string。我还是要掌握住Char数组的形式。所以在这里我先使用数组的形式。
char *src="abcd";
   上面一句话的意思是,是src指向一个字符串。字符串的长度我们可以使用函数:strlen(src)来计算,可想而知,这个长度是4。它不包含字符串结束符''。下面我们定义一个目标字符串,仍然使用char指针的形式:
char *des;
   我们很自然的想起函数strncpy(char *des, char *src, int len),意思是从原字符串复制len长度个数的字符到目标字符串。注意了,注意了,如果使用:strncpy(des,src,strlen(src)),这里会有两个错误,你知道吗?
   第一个错误:
             des没有使用new或malloc的方式分配内存空间,所以它实际上还是一个null。
   第二个错误:
             在改正第一个错误之后:
             char *des=new char[strlen(src)];
             strncpy(des,src,strlen(src));
             首先是开辟了一个strlen(src)长度的内存空间,并且复制目标串。注意一下过程:
             src在内存中状态为:
             ['a','b','c','d','']
             我们在使用strlen(src)计算src长度的时候,得到的长度为4。
             所以上面char *des=new char[strlen(src)];事实上开辟了4个字节的空间,而复制也是复制了4个字符,按道理来说是没有错误的。可是结果呢?我们使用cout<<res<<endl;输出结果却是abcd XXX 一段乱码。究其原因无论是C中还是C++中,字符串的结尾都是''。虽然我们申请了4个空间,但是却意外的被多复制

了几个未知字符。为了解决这个问题。

   我们如下处理:

               char *src="abcd";
               char *des = new char[strlen(src)+1];
               strncpy(des,src,strlen(src)+1);

   这样就是多申请了一个结束符空间,并且在复制的时候,复制此结束符。红色为正确书写方式。一定要多加注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值