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:_
复制代码

 

posted on   空明流光  阅读(1227)  评论(0编辑  收藏  举报

编辑推荐:
· 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 路径

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示