C语言指针 与字符串的学习
字符数组 元素是单个单个的字符 char cdata[ ] ={ ' a ', 'b' , 'c' ,'d' , 'e' }; 字符串 末尾隐藏 ' \0 ' char cada[ 100 ] ={ ' \ 0 ' }; 置0 表达式1 char cdata [ 12 ] ="mydm sz "; 表达式2 char *pchar ="mydm sz"; 表达式1与2的区别在于 : 1中cdata是地址变量,可以修改对应的字符串里的单个字符内容 2中 pchar是地址常量,字符串是个整体,无法被修改,只有整体概念,无单个字符概念 表达式1与2的区别在于: sizeof( p ) 在os中一个地址8位/4位 sizeof(cdata) 数组的所有空间 strlen(cdata)有效数据的空间
字符串相关操作: char cdata [ 128 ] ={ ' \0 ' }; scanf( " %s " , cdata ); char *pchar = "mydm sz" ; puts(pchar) ; putchar( ' A ' ); puts(" Done! " ) ;
表达式1下的sizeof和strlen char cdata[ 121 ] ="mydmsz"; sizeof 标识符 数组开辟的总空间大小 strlen函数 数组开辟的有效数据的空间大小 常见的API函数 < stdblib.h >
1.malloc函数
p =( void *)malloc(12) 在堆上开辟空间,使指针不野。
2.realloc在原本p的内存上开辟newlwn空间 char *p=( char *) malloc( num) ; int len= strlen("yyyyyyyyyyy "); int newlwn =len-num+1; realloc (p, newlen ) 换成情形1可以实现用户根据自己的输入开辟对应的空间,扩容对应的空间。
3.free函数
free ( p ) 清除malloc开辟空间,特别是已经成了悬空的内存空间
<string.h>
1.memset 字符串在情景1下才能这样用(用sizeof) char str[10]; memset(str, '\0', sizeof(str)); 在情景2下只能用单独的数字 p =( void *)malloc(12) memset( p, '\0' ,12或者num ) ; 2.strcopy ( strncopy ) 用后面的(其中几个字节)把前面覆盖 函数。指针1和指针2齐头并进。
strncmp while(*des && *src && ( *des=*src )&&count ) 进入if条件同理
若count大于元函数的大小 用count--耗尽,下面*des被赋结束标志后立即返回函数值bak,防止最下面*des被再次赋结束标志。
3.strcat 指针1先走,找到自己的\0之后,指针二的内容覆盖到\0上 ,两指针各自前行 最终出现两个结束\0标志,实际上上是一个\0,赋值后与while里的0比较不满足条件,指针不自增,即跳出条件的\0把原本被赋值的\0给覆盖了(用的是 (*a++=*b++)!='\0' )
另一种方式 借助strcopy(cdata+strlen(cdata) , p );
4.strcmp 比较函数 对应长度对应字符不相等时跳出 while(*des && *src && ( *des=*src ) ) while里有指针时,条件侧重' \0 ' 不满足条件 if(*des || *src ) 进入条件进行各自对应的相加,注意这之前需将指针归位
<assert.h>断言函数 assert(des!= NULL && src!=NULL ) 当条件不满足时,打印提示信息并将中指程序向下的运行
本章结的总要思想
1.(*a++=*b++ ) !=' \0' ; 自增运算第一位,但指针++放在所有操作进行完之后,即先两个解引用完,在进行赋值,在进行条件的判断,只有当前面的操作进行完之后,指针才会++
2.while中有指针时 '\0' 就是0,即不满足条件 while(*des);
3.while(*src)
{ *des =*src; 情况A des++; src++;
} *des ='\0';
情况B while( (*des++ =*src++) !='/0' ); *des='/0'; 看似两个结束标志,实则指针未移动,条件的结束标志把 *src赋给*des的结束标志 覆盖
if(des==NULL|| src==NULL){
return 0; }
C语言指针 与字符串的学习相关推荐
- AutoLeaders控制组——C语言指针和字符串学习笔记
指针和字符串目录 1.指针概述 1.1内存 1.2物理存储器和存储地址空间 2指针基础知识 2.1指针变量的定义和使用 2.2通过指针间接修改变量的值 2.3指针大小 2.4野指针和空指针 2.5万能 ...
- c语言 指针到字符串,C语言中的指针和字符串
前言 务必理解指针与内存模型,不要死记硬背. 内存里的字符串 C语言中的字符串一般是char *类型的,这是怎样存在内存中的呢? cchar *s = "NIHAO"; | s:4 ...
- c语言指针 查找字符串,C语言基础及指针⑥字符操作
字符操作 , 是我们写程序时 , 最常用的一种操作 , 例如:字符串截取 , 字符串替换 , 字符串转整数类型等等 , 都是字符操作 , 在java中String类就是二三十个方法 , 还有Strin ...
- c语言指针指向字符串单个,C语言 有没有可能调用一个指向字符串的函数指针?...
我是个在学C的萌新,一天突发奇想,指令和数据只是对人来说才有意义, 一段二进制串对CPU来说既可是数据,也可是指令,IP指向哪里就当作指令执行.那这样的话是不是意味着可以在C中执行字符串呢? 可,在探 ...
- c语言指针字符串逆序存放,C语言指针实现字符串的反转
题目要求: 编写程序:从键盘任意输入一个字符串,输出该字符串. 然后,将该字符串逆序存放后再输出,要求用字符指针完成. 代码: //解法一 #include #include int main() { ...
- C语言 指针与字符串
基础 字符串的表现形式 char string[] = "hello world"; //栈(局部) char *str = "hello world": // ...
- c语言指针实现字符串倒序输出,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void fun (char *ch1, char *ch2) { int i, n(0), k; int lengt ...
- c语言指针交换字符串组,c语言 指针交换两个字符串
其实这个题是要用结构把学生成绩输进去再根据程序排序再输出学生信息,我不知道怎么根据成绩大小把st[].name输出啊,我用了一个交换函数,change想交换st[j].name和st[j-1].nam ...
- 【学习笔记】C++语言程序设计(郑莉):数组、指针与字符串
[学习笔记]C++语言程序设计(郑莉):数组.指针与字符串 1. 数组 1.1 数组的声明与使用 1.2 数组的存储与初始化 1.3 数组作为函数参数 1.4 对象数组 2. 指针 2.1 内存空间的 ...
- C语言学习之利用指针将字符串a复制为字符串 b,然后输出字符串b
利用指针将字符串a复制为字符串 b,然后输出字符串b int main(){char a[]="i am a student",b[20];//定义字符数组int i;for(i= ...
最新文章
- 【安全漏洞】CVE-2021-1732 win32k漏洞分析
- 数据结构之希尔排序图文详解及代码(C++实现)
- potential things for recommendation
- Windows Server 2012和Windows 8中的远程管理
- 【转】体验 Silverlight 5 3D开发之环境搭配篇
- [Swift]LeetCode551. 学生出勤纪录 I | Student Attendance Record I
- 秀!微软《550页图解.Net+WPF完整版》.pdf 附下载!
- Windows 手动触发 BSOD
- pycharm conda 环境 切换 linux_windows配置wsl2环境+pycharm指路
- Python笔记 #19# 实现bpnn
- centos7安装erlang
- vscode好用插件——磨刀不误砍柴工!
- 益聚星荣|网络主播雪梨、林珊珊偷逃税被罚,2个月前已进行立案检查
- 朴新教育澄清破产传闻:债务重组是最有利方案 公司继续经营
- 【毕业设计】8-基于STM32的水质_浊度检测仪设计与实现(原理图+源码+实物照片+答辩论文)
- 如何学习大型项目的源码?
- 软件研发类应届毕业生培养考核的三个阶段
- mui 写出Tab标签可滑动可点击的效果(下划线效果)
- matlab 图像中加入高斯白噪声,MATLAB——如何给图像添加高斯白噪声
- RedisTemplate指令