动态数组的使用:

通常因为在编译时无法知道数组的维数,所以才需要动态创建该数组。例如,在程序执行过程中,常常使用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);

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

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

  1. java char 动态数组_Java程序来填充char数组中的元素

    可以使用java.util.Arrays.fill()方法将元素填充到char数组中.此方法将所需的char值分配给Java中的char数组.所需的两个参数是数组名称和要存储在数组元素中的值. 演示此 ...

  2. 第二十二篇 玩转数据结构——构建动态数组

    1.. 数组基础 数组就是把数据码成一排进行存放. Java中,数组的每个元素类型必须相同,可以都为int类型,string类型,甚至是自定义类型. 数组的命名要语义化,例如,如果数组用来存放学生的成 ...

  3. js 多维数组长度_C++申请与释放动态数组1(学习笔记:第6章 16)

    分配和释放动态数组[1] 分配: new 类型名T [ 数组长度 ] 数组长度可以是任何表达式,在运行时计算 释放:delete[] 数组名p 释放指针p所指向的数组. p必须是用new分配得到的数组 ...

  4. 基础数据结构【二】————动态数组,单向链表及链表的反转

    DEMO1:     动态分配变量(链表,而静态数组是线性表,意味着动态数组访问和遍历复杂度为O(n),而插入和删除复杂度为O(1),而静态数组线性表则完全相反) int* intptr = new ...

  5. vector 容器 动态数组总结

    vector 容器 动态数组总结 二话不说直接上代码 #include <vector> #include <algorithm> #include <iostream& ...

  6. c语言动态申请函数,C语言用malloc函数申请二维动态数组

    C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { char * p=(char *)malloc(siz ...

  7. c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构

    我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...

  8. 动态数组 allocator

    问题来源 在编写程序的时候,对数组."二维数组"的分配的删除掌握的不是很清楚,不能正确的进行定义初始化. 以及在使用vector的时候,如何正确的定义及初始化 注意!!! 尽量使用 ...

  9. nginx学习七 高级数据结构之动态数组ngx_array_t

    1 ngx_array_t结构 ngx_array_t是nginx内部使用的数组结构.nginx的数组结构在存储上与大家认知的C语言内置的数组有相似性.比方实际上存储数据的区域也是一大块连续的内存. ...

最新文章

  1. Spring boot显示登录用户
  2. 没落的Ubuntu Touch想翻盘:新技术可运行Android应用
  3. 腾讯会议核心数据库TDSQL,如何做到快速无损在线扩容?
  4. SAP CRM Distribution Chain数据模型
  5. MarkDown的介绍
  6. 网络研讨室_即将举行的网络研讨会:调试生产中Java的5种最佳实践
  7. Data-structures-and-algorithms-interview-questions-and-their-solutions
  8. Spring简化Java开发_spring如何简化java开发
  9. 最佳实践:使用负载均衡SLB IPv6搞定苹果AppStore审核
  10. python日期迭代_计算敏捷项目中迭代时间安排(Python3版)
  11. AndroidStudio_在android中使用定时器_异步定时实现心跳保活功能---Android原生开发工作笔记231
  12. 推荐系统-Task03离线物料系统的构建
  13. native方法在java中介绍及使用图解
  14. CodeForces - 884B Japanese Crosswords Strike Back
  15. 如何使用条形码字体在Crystal Report中创建代码39?
  16. pattern.compile java_Java Pattern compile(String)用法及代码示例
  17. w ndows7与windows10区别,windows7和10区别
  18. 【设计模式学习】工厂方法模式
  19. activiti——监听器
  20. android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...

热门文章

  1. 猪猪的机器学习(十九)卷积神经网络
  2. FAT、FAT32和exFAT文件系统
  3. 计算机算法与结构知识点,【数学】“算法初步与框图”知识点总结
  4. 《大数据: Flume 多个Agent 串联(AvroSource、AvroSink)》
  5. 简述 Linux DRM 架构
  6. 高中计算机会考怎么考,会考通过需多少分
  7. php 5.3中的一个type hinting的用法
  8. 字符串(1) : 首字母转大写/小写
  9. 世界上第一台计算机内存容量,29、世界上第一台电子计算机ENIAC诞生于.doc
  10. HDU-2952-Counting Sheep