C语言学习018:strdup复制字符串数组
在C语言学习005:不能修改的字符串中我们知道字符串是存储在常量区域的,将它赋值给数组实际是将常量区的字符串副本拷贝到栈内存中,如果将这个数组赋值给指针,我们可以改变数组中的元素,就像下面那样
int main(){
char s[]="hello c";
char* temp=s;
temp[]='a';
temp[]='b';
printf("%s\n",s);
return ;
}
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实现
int main(){
char s[]="hello c";
char* temp=strdup(s);
temp[]='a';
temp[]='b';
printf("%s\n",s);
return ;
}
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复制字符串数组的更多相关文章
- 【C语言学习】-05 二维数组、字符串数组、多维数组
⼆二维数组.字符串数组.多维数组
- 吴裕雄--天生自然C++语言学习笔记:C++ 字符串
C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...
- C语言学习之我见-strcpy()字符串复制函数
strcpy()函数,用于两个字符串值的复制. (1)函数原型 char * strcpy(char * _Dest,const char * _Source); (2)头文件 string.h (3 ...
- C语言学习之我见-strncpy()字符串复制函数(可控制范围)
strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...
- Go语言学习笔记(三)数组 & 切片 & map
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 数组 Arrays 数组是同一种数据类型的固定长度的序列. 数组是值类型,因此改变副本的值,不会改变本身的值: 当 ...
- c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...
- Go语言学习之4 递归&闭包&数组切片&map&锁
主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...
- Swift语言学习(四)字符串与Array等集合的使用
Swift 提供了C和Objective-C基础类型的自己一套版本,包括用于整型的Int,用于浮点值的Double和Float,用于布尔值的Boolean,和用于文本数据的String.Swift还提 ...
- Dart语言学习(六) Dart 列表List数组
创建List : var list = [1,2,3,"Dart",true]; 创建不可变List : var list = const [1,2,3,"Dart&qu ...
随机推荐
- Matrix Admin 后台模板笔记
一个后台模板用久了就想换一个.上次找到了Matrix Admin.和ACE一样都是Bootstrap风格,比较容易上手.Matrix要更健壮些.感觉拿去做用户界面也是可以的. 整体风格: 1.表单验证 ...
- Spring-Context之三:使用XML和Groovy DSL配置Bean
在第一讲中显示了如何使用注解配置bean,其实这是Spring3引进的特性,Spring2使用的是XML的方式来配置Bean,那时候漫天的XML文件使得Spring有着配置地狱的称号.Spring也一 ...
- Android Studio2.x版本无法自动关联源码的解决方法
Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...
- WebApi系列~dynamic让你的省了很多临时类
回到目录 dynamic这个动态类型早在.net3.5时就已经出现了,当时是伴随的Linq一起让我们认识的,但在使用时总觉得有点别扭,因为它是internal的,所以不能跨程序集使用,这对于分层开发的 ...
- OutputCache属性详解(一)一Duration、VaryByParam
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
- BugHD for JavaScript上线,轻松收集前端 Error
从收集 APP 崩溃信息到全面收集网站出现的 Error,现在的 BugHD 变得更加强大.目前,BugHD JS Error 收集功能 已正式上线,前端 er 们不用再面对一堆 Bug 无处下手. ...
- Android笔记——活动的生命周期
一.活动的重要性 掌握活动的生命周期对任何 Android 开发者来说都非常重要,当你深入理解活动的生命周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的游刃有余.你的应 ...
- try-catch和throw,throws的区别
java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws,还有一个try catch 程序块.接下来我们挨个看看这几个的 ...
- ssh(sturts2_spring_hibernate) 框架搭建之struts2
一.struts2完整流程的逻辑(整体的概述) 首先,用户在地址栏中输入你的项目访问路径,然后这个请求会发送到服务器,之后服务器发现在web.xml中配置了一个filter过滤器,并且这个过滤器需要对 ...