c语言字串指针 char*
c语言中 char* 不仅能存字符串,还能存二进制数据,所以它的用途因使用者而定。
char* 在很多使用场景下,是需要存储ascii码为0的元素的,这样就必须注意一个问题,那就是char*的长度。
c语言中是没有办法检测char*长度的,这样也就能解释之前为什么我在网上找到的那么多示例函数都把长度信息从函数参数里带进带出了。
比如这几天在做 rsa 加密、解密时就遇到了一会解密正常,一会儿不正常的情形,感觉像是指针漂移。
对于我这个写了多年vb、c#的程序员,还真是一头雾水,今天终于搞清楚了。
之前一直对这个数据类型不清楚,专门写了一个示例程序,以备忘。示例中的 sizeof 只有部分编译器支持,其实不是通用的。
代码如下:
char* p = (char*)malloc(8); int i = 0; for (i = 0; i < 8; i++) if (i == 5) p[i] = 0; else p[i] = 'a' + i; cout << "strlen(p):" << strlen(p) << endl; cout << "sizeof(p):" << sizeof(p) << endl; cout << "p:" << p << endl; for (i = 0; i < 8; i++) printf("%d:%c\t", i, (p[i] == 0 ? '_' : p[i])); cout << "\nbefore free:" << endl; for (i = 0; i < 8; i++) cout << i << ":" << (p[i] == 0 ? '_' : p[i]) << endl; free(p); cout << "after free:" << endl; for (i = 0; i < 8; i++) cout << i << ":" << (p[i] == 0 ? '_' : p[i]) << endl;
程序输出如下:
strlen(p):5 sizeof(p):8 p:abcde 0:a 1:b 2:c 3:d 4:e 5:_ 6:g 7:h before free: 0:a 1:b 2:c 3:d 4:e 5:_ 6:g 7:h after free: 0:_ 1:_ 2:_ 3:_ 4:_ 5:_ 6:_ 7:_
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2017-11-24 asp.net 动态更改 Request.Header
2017-11-24 SharpDevelope 在 Windows 7 SP1 with .net framework4.0 下编译时找不到resgen.exe 解决办法
2016-11-24 VB CreateObject转C#
2014-11-24 获取 .net framework 路径