c语言中 char* 不仅能存字符串,还能存二进制数据,所以它的用途因使用者而定。

char* 在很多使用场景下,是需要存储ascii码为0的元素的,这样就必须注意一个问题,那就是char*的长度。

c语言中是没有办法检测char*长度的,这样也就能解释之前为什么我在网上找到的那么多示例函数都把长度信息从函数参数里带进带出了。

比如这几天在做 rsa 加密、解密时就遇到了一会解密正常,一会儿不正常的情形,感觉像是指针漂移。

对于我这个写了多年vb、c#的程序员,还真是一头雾水,今天终于搞清楚了。

之前一直对这个数据类型不清楚,专门写了一个示例程序,以备忘。示例中的 sizeof 只有部分编译器支持,其实不是通用的。

代码如下:

    char* p = (char*)malloc();
int i = ;
for (i = ; i < ; i++)
if (i == )
p[i] = ;
else
p[i] = 'a' + i; cout << "strlen(p):" << strlen(p) << endl;
cout << "sizeof(p):" << sizeof(p) << endl; cout << "p:" << p << endl; for (i = ; i < ; i++)
printf("%d:%c\t", i, (p[i] == ? '_' : p[i])); cout << "\nbefore free:" << endl; for (i = ; i < ; i++)
cout << i << ":" << (p[i] == ? '_' : p[i]) << endl; free(p); cout << "after free:" << endl; for (i = ; i < ; i++)
cout << i << ":" << (p[i] == ? '_' : p[i]) << endl;

程序输出如下:

strlen(p):
sizeof(p):
p:abcde
:a :b :c :d :e :_ :g :h
before free:
:a
:b
:c
:d
:e
:_
:g
:h
after free:
:_
:_
:_
:_
:_
:_
:_
:_

最新文章

  1. 音频指纹(Philips)
  2. ThinkPHP报错处理
  3. Linux内核调试方法总结【转】
  4. 封装getByClass
  5. java.io.File中的pathSeparator与separator的区别
  6. 【USACO 3.3.2】商品购物
  7. C#实现WinForm传值实例解析
  8. PHP学习笔记三
  9. MVC 后台DataTable 前台遍历
  10. 让Solr返回JSON数据
  11. 点评阿里JAVA手册之异常日志(异常处理 日志规约 )
  12. Python3 字符串与hex之间的相互转换
  13. Namenode启动报错Operation category JOURNAL is not supported in state standby
  14. Ubuntu系统安装nginx
  15. 1、根&quot;/&quot;目录结构
  16. leetcode139
  17. Redis 多个数据库
  18. 一张图知道HTML5布局(图)
  19. [Mark]Tomcat/IIS 更改 HTTP 侦听端口
  20. 【转】tair与redis比较总结

热门文章

  1. Ubuntu18.04 安装netstat
  2. [转]为什么要引入nullptr?
  3. SQL Server设置启动存储过程
  4. openCV for python的使用
  5. python数据类型基础与解压缩
  6. c++列举出本地打印机和网络打印机名称
  7. SpringMVC POJO入参过程分析
  8. MySQL数据库安装和启动
  9. java面向对象2-封装
  10. swiper保存