在C语言学习005:不能修改的字符串中我们知道字符串是存储在常量区域的,将它赋值给数组实际是将常量区的字符串副本拷贝到栈内存中,如果将这个数组赋值给指针,我们可以改变数组中的元素,就像下面那样

  1. int main(){
  2. char s[]="hello c";
  3. char* temp=s;
  4. temp[]='a';
  5. temp[]='b';
  6. printf("%s\n",s);
  7. return ;
  8. }

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAocAAAAbCAIAAACBTbKkAAACFklEQVR4nO3dW1LiQABA0SzCD40BN+BWSAiuzjzYw+gGXMM4C5qPSAsBYnBwmlDnFB8a8uhUUd7qrlgkaV6neXWXV3eL6nbxfLt4rn79vnkskiR525J8S3fg267w1sHt++/2Ng5fbn//kScfPmdv2CPPP7D/wCHfG+eYW7ic+/3y0gfPk4z+DEQZP8AZpMXRKk/CsT/BF+jCh3d2U7/fqY8fmKTPKufV3QSrnJxvTvmjJjHIM5r6/U59/MBUpUWdFnWa15swV5OrMgBcifuuysWmynlVv6gyAMQQqhwe+6rNlQEgivui7oXZXBkA4rhfNp9hzus0r1UZAOLIlk0X5jBdHq7ywIOpX/4/qMdZAWBIqHKYMdcv78Nz5eG+Djf7X4cLAFcsWzYfYV5+hFmVASCOrGw2Ye5XecyK9H5ox1f51JVtK+EAXLmsbLswh3XsZm+u3Avh9q/HWrt/oZNOMny4MANwnUKVw4y5OTRXvqgqA8B1mpVNVjZZ2YYwN6/vN4/FQDVVGQB+xBSrrNAAXKdZ2c66Rexyp8rJke+d7f2wH9pt47ePGeqp+wPAxMxWbRfmWdl2M+ZQZQDgv5qv2ln3UmUAiGu3yk1WqjIARDJftfNNlbtX8/pHlQEggs8qb9qsygAQx3y13glz2bZWsAEgilDlEObWXBkAolBlALgUD0/rh6f19jq2KgNAHL0qz1UZACL5C06XcNUkF2U9AAAAAElFTkSuQmCC" alt="" />  

  但是现在我们不想让指针可以修改字符串数组的中的元素,而又可以得到字符串中的元素,那么我么需要再拷贝一份字符串数组的元素的副本,然后把地址给到指针,就可以通过strdup实现

  1. int main(){
  2. char s[]="hello c";
  3. char* temp=strdup(s);
  4. temp[]='a';
  5. temp[]='b';
  6. printf("%s\n",s);
  7. return ;
  8. }

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoUAAAAYCAIAAAADLBA3AAABaklEQVR4nO3cTU7CQBiA4TmTXkQPIJRr6GGg9RLiikvAWb7EmcYF/jSAtbJwIj7PikzopLs336Rtulu+3C3z07Zc3z4kAODXRUSaLfNsldd6DACVRESarfJslZ+2WY8BoIrPHpuPAaAWPQaA+iIizQc93rybvsVmYMo6AHAgItK8zfPBfHxeQb+6So8B4FvvPW71GACqGevxQUrHz5+nr//0HNu5NwAXb9/jctzjgyQPc3gyjRN7/O0+I5dLMgCXKiJS05Z5W06eVx/0eGRU/YUeA8CleutxM63HIxvpMQCc7Zwe15qPtRmASxURqen6pisn3z8+/n0cxc2R6etTbvGn/weAPyci0qLrm673fS4AqGXQ450eA0Ad+x6XRdc/73o9BoAq3uZjPQaAiiIiLR71GABq0mMAqO/zvHqtxwBQycf7x56vBoBqPp6vLutdub7RYwCoYP+9zNy0eb0tVzf3te8HAP6jiHgF7D5JpbbOH9EAAAAASUVORK5CYII=" alt="" />

  

C语言学习018:strdup复制字符串数组的更多相关文章

  1. 【C语言学习】-05 二维数组、字符串数组、多维数组

    ⼆二维数组.字符串数组.多维数组

  2. 吴裕雄--天生自然C++语言学习笔记:C++ 字符串

    C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...

  3. C语言学习之我见-strcpy()字符串复制函数

    strcpy()函数,用于两个字符串值的复制. (1)函数原型 char * strcpy(char * _Dest,const char * _Source); (2)头文件 string.h (3 ...

  4. C语言学习之我见-strncpy()字符串复制函数(可控制范围)

    strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...

  5. Go语言学习笔记(三)数组 & 切片 & map

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 数组 Arrays 数组是同一种数据类型的固定长度的序列. 数组是值类型,因此改变副本的值,不会改变本身的值: 当 ...

  6. c语言学习笔记 - 指针和字符串

    前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...

  7. Go语言学习之4 递归&闭包&数组切片&map&锁

    主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...

  8. Swift语言学习(四)字符串与Array等集合的使用

    Swift 提供了C和Objective-C基础类型的自己一套版本,包括用于整型的Int,用于浮点值的Double和Float,用于布尔值的Boolean,和用于文本数据的String.Swift还提 ...

  9. Dart语言学习(六) Dart 列表List数组

    创建List : var list = [1,2,3,"Dart",true]; 创建不可变List : var list = const [1,2,3,"Dart&qu ...

随机推荐

  1. 上层建筑——DOM元素的特性与属性(dojo/dom-attr)

    上一篇返本求源中,我们从DOM基础的角度出发,总结了特性与属性的关系.本文中,我们来看看dojo框架是如何处理特性与属性的.dojo框架中特性的处理位于dojo/dom-attr模块属性的处理为与do ...

  2. WPF版的权限管理系统

    好多技术人员都有一个通病,不关注用户的需求,产品的可用性,只看使用的技术的新不新,潮不潮,这就是所谓的技术发烧友. 这段时间,断断续续的开发一个WPF的软件,也拿出来Show一下.要不放在硬盘里就发霉 ...

  3. 记一个界面刷新相关的Bug

    今天遇到一个比较有意思的bug, 这里简单记录下. Bug的症状是通过拖拉边框把我们客户端主窗口拖小之后,再最大化,会发现窗口显示有问题, 看起来像是刷新问题, 有些地方显示的不对了. 这里要说明的是 ...

  4. IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端

    1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...

  5. JavaScript高级-定义函数(类)方法

    1.定义普通函数(常用) //1.普通函数 function defineFun1(p1, p2) { return p1 + p2; } 2.定义匿名函数(最常用) //2.匿名函数 var def ...

  6. lua使用io.open跨平台文件夹遍历匹配查找

    -- Desc :实现在LUA_PATH中的lua文件中遍历寻找没用到PNG_PATH路径下的png图片,并将其打印出来. -- Date :12:49:28 2014-09-04 1 print(& ...

  7. flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成

    理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...

  8. 无法启动此程序,因为计算机中丢失AdbWinApi.dll。尝试重新安装该程序以解决此问题

    第一次搭建android开发环境,装完adb以后,打开DOS验证安装是否成功:但输入adb logcat调试时,系统弹出以下异常的对话框: 无法启动此程序,因为计算机中丢失AdbWinApi.dll. ...

  9. Linux常用命令02

    显示当前目录 pwd         (print working directory)   显示当前目录 创建目录 mkdir       (make directory) 创建目录(注意不是创建文 ...

  10. MySQL(二) 数据库数据类型详解

    序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...