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 ...
随机推荐
- 【读书笔记】-- JavaScript数组
数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型. var misc = ['string', n ...
- JS闭包中的this对象
我们知道,当函数被作为某个对象的方法调用时,this等于那个对象,不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window. 下面代码很好的说明了这一点: var name = 'T ...
- 【转】优化Web程序的最佳实践
自动排版有点乱,看着蛋疼,建议下载中文PDF版阅读或阅读英文原文. Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了 一系列的实验.开发了各 ...
- Git学习笔记(1)——安装,配置,创建库,文件添加到库
初次接触git,为了记忆深刻,把学习的简单流程记录下来. 本文记录了Git在Ubuntu上的安装,配置,以及创建版本库和往库中添加文件的过程. 1.Git的安装:(Ubuntu-Linux非常友好的安 ...
- MFC:在OnInitDialog 里面关闭窗体
解决步骤 在对应的dialogcpp 文件里面的在OnInitDialog函数里面,找到对应的位置,您需要结束窗体显示的地方.(感觉这是废话) 经过验证,使用EndDialog(IDCANCEL);/ ...
- 10 个 Redis 建议/技巧
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/145.html?1455790611 Redis 在当前的技术社区里是非常 ...
- Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection
网易公开课,第10,11课 notes,http://cs229.stanford.edu/notes/cs229-notes5.pdf Model Selection 首先需要解决的问题是,模型 ...
- 说说设计模式~ 模版模式(Template)
返回目录 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...
- NFC:Arduino、Android与PhoneGap近场通信
NFC:Arduino.Android与PhoneGap近场通信(第一本全面讲解NFC应用开发的技术著作移动智能设备近距离通信编程实战入门) [美]Tom Igoe(汤姆.伊戈),Don Colema ...
- iOS-观察者模式
cocoa框架中很多地方都使用了观察者模式 一.KVO Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.每次指定的被观察的对象的属性被修改后, ...