【工作笔记】C语言的字符串真麻烦,好好梳理下
来源:互联网 发布:抗美援朝有必要吗 知乎 编辑:程序博客网 时间:2024/04/30 12:17
C的字符串
C
的字符串很麻烦,不能像C++
那样对字符串+
,长度又不能随便变。真TMD烦,有一句粗话真不知道当讲不当讲。时间全都浪费在处理字符串上了。这个笔记中我要好好总结下,避免浪费时间。
各种变量内存模型图
这是一个前辈写的,非常详细转自网络,大一大二时就看到过,现如今再看看感觉跟神图一样。
int a = 0; // 全局初始化区char *p1; // 全局未初始化区int main(){ int b; // 栈 char s[] = "abc"; // 栈 char *p2; // 栈 char *p3 = "123456"; // 123456在常量区,p3在栈上。 static int c = 0; // 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); // 分配得来得10和20字节的区域就在堆区 /* 123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。*/ strcpy(p2, p3);}
字符串
看了上面的代码,再看看这里的代码就会有感觉。
#include <stdio.h>#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) { char *str="jingjing"; // 常量形式 字符串"jingjing"存放在常量区 char arrStr[]="jingjing"; // 数组形式 字符串"jingjing"存放在栈中 /* 操作 */ //str[1]='p'; // 不合法 报错 arrStr[1]='p'; // 合法 printf("%s\r\n", str); printf("%s\r\n", arrStr); return 0;}
上面代码中两个字符串都在函数中,但是意义却不同。为什么字符串是"jingjing"
因为当时写这个博客时在公司,抬起头正好看到一个叫菁菁的女生。
字符串在栈中
char arrStr[]="jingjing" // 指针和字符串都在栈中;
上面的这个字符串部分在栈中,arrStr
这个指针也在栈中。原理应当是C标准的规定。怎么记住呢?这样助记:在一个字符数组里,每一位存放一个字符 'j', 'i', 'n' ... 'g'
。
常量指针
str
是一个可以移动的指针。 str++ str--
都是合法的。 arrStr
是一个常量指针。arrStr++ arrStr--
都是不合法的。
总结
万物皆对立统一,矛盾具有普遍性 哲学一定是客观存在的,且具有普遍性。我相信C的字符串这么麻烦,一定有利好的作用。
1 0
- 【工作笔记】C语言的字符串真麻烦,好好梳理下
- c语言要修改或者读取、更改txt的话,真的需要好好看下代码
- c语言山迪的麻烦
- 麻烦麻烦真麻烦。。。。
- 好好学C语言
- 好好的工作吧
- 工作,麻烦的事情~~~~
- 好好的东西真不坏
- Objective-C的一些语言点梳理
- C语言梳理指针的混淆点
- C语言笔记-字符串
- 【笔记-C语言】 字符串
- 我的c语言笔记---字符串
- C语言基础知识梳理
- C语言知识点梳理
- C-字符串完美处理的程序——好好汲取
- 真麻烦
- 真麻烦、、
- oracle安装--db_install.rsp详解
- 每个程序员都应该了解的内存知识3——虚拟内存
- Spring通过@Value注解注入属性的几种方式
- Xcode结合iTunes快速打包制作ipa
- ArcSDE10.2在SQL Server上的配置与连接
- 【工作笔记】C语言的字符串真麻烦,好好梳理下
- iOS App让自己的应用在其他应用中打开列表中显示、iOS把自己的应用添加到”活动“、将PDF文件Open In MyApp
- select基本的取值,赋值及清空
- 【ES6】Proxy
- oracle安装--netca.rsp详解
- android 电容屏(一):电容屏基本原理篇
- Unity时钟
- SQL语言基础
- Android-GridView-属性