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:
:_
:_
:_
:_
:_
:_
:_
:_

c语言字串指针 char*的更多相关文章

  1. Inno Setup:获取isl中的多国语言字串

    原文 http://zwkufo.blog.163.com/blog/static/25882512010101041626803/?suggestedreading&wumii 用InnoS ...

  2. char s[]字串和char *s字串有什麼区别?

    C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢? Introduction char s[] = "Hello World"; (只是用字符串常量初始化 ...

  3. C语言 · 字串逆序

    算法训练 字串逆序   时间限制:1.0s   内存限制:512.0MB      问题描述 给定一个字符串,将这个串的所有字母逆序后输出. 输入格式 输入包含一个字符串,长度不超过100,字符串中不 ...

  4. C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()

    //自定义一个字符串字串查找标准库函数strstr() #include<stdio.h> #include<string.h> char* myStrstr(char *st ...

  5. 一道C语言面试题:判断字串是否可以通过重新排列字母使之对称

    题目:输入一个字符串,如“adcaeceeed”,判断是否可以通过重新排列使之可以输出对称字符串,如本例可以输出“adceeeecda”,返回True. 来源:某500强企业面试题目 思路:扫描字串, ...

  6. C语言 · 周期字串

    算法提高 周期字串   时间限制:1.0s   内存限制:256.0MB      问题描述 右右喜欢听故事,但是右右的妈妈总是讲一些“从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢 ...

  7. C语言之漫谈指针(下)

    C语言之漫谈指针(下) 在上节我们讲到了一些关于指针的基础知识: 详见:C语言之漫谈指针(上) 本节大纲: 零.小tips 一.字符指针 二.指针数组与数组指针 三.数组传参与指针传参 四.函数指针及 ...

  8. 【字符串】BZOJ上面几个AC自动机求最为字串出现次数的题目

    (一下只供自己复习用,目的是对比这几个题,所以写得不详细.需要细节的可以参考其他博主) [BZOJ3172:单词] 题目: 某人读论文,一篇论文是由许多(N)单词组成.但他发现一个单词会在论文中出现很 ...

  9. codevs1099 字串变换

    题目描述 Description 已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ -> B2$ 规则的含义为:在 A$中的子串 A1$ ...

随机推荐

  1. zencart后台修改首页meta_title、meta_keywords、meta_description

    includes\languages\english\模板\meta_tags.php 首先,将meta_tags.php中常量HOME_PAGE_META_DESCRIPTION.HOME_PAGE ...

  2. Codeforces 976 正方格蛇形走位 二维偏序包含区间 度数图构造 贪心心火牧最大dmg

    A #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; int main() { i ...

  3. CentOS7位安装MySql教程

    1.先检查系统是否装有mysql rpm -qa | grep mysql 2.下载mysql的repo源 wget http://repo.mysql.com/mysql-community-rel ...

  4. Spring + Mybatis 企业应用实战 第1章 Java EE应用

    Java EE应用的分层模型: Domain Object 领域对象层.就是一些pojo. DAO(data access object) 数据访问对象 Service 业务逻辑层 Controlle ...

  5. 一个web应用的诞生(7)

    现在所有的Py代码均写在default.py文件中,很明显这种方法下,一旦程序变的负责,那么无论对于开发和维护来说,都会带来很多问题. Flask框架并不强制要求项目使用特定的组织结构,所以这里使用的 ...

  6. 【shell】grep使用正则表达式

    要求如下: 有一些具有固定格式的数字, 如下: -- ()-- -- (-- 复制代码 条件: .> 长度为7的数字 .> 由 ,, 长度组成, 并由 - 字符进行分割的 .> 第一 ...

  7. The Preliminary Contest for ICPC Asia Shanghai 2019 L. Digit sum

    题目:https://nanti.jisuanke.com/t/41422 思路:预处理 #include<bits/stdc++.h> using namespace std; ][]= ...

  8. JUnit——Failure与Error

    (1)Failure是指测试失败(2)Error是指测试程序本身出错

  9. 容器————map

    序列容器是管理数据的宝贵工具,但对大多数应用程序而言,序列容器不提供方便的数据访问机制.一种典型的方法是通过名称来寻找地址.如果记录保存在序列容器中,就只能通过搜索得到这些数据.相比而言,map 容器 ...

  10. adaptiveThreshold(自适应阈值)

    void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thr ...