当前位置: 首页 > news >正文

刷题记录(3)C语言中的字符

这篇文章是对我这段时间疑惑的一个总结,因为自从学了字符串函数还有整型数据在内存中的存储,包括之前学的分支循环都不乏有字符的身影。

最近的一道题算是让我的疑惑达到顶峰了:

int main()
{
  char a[1000] = {0};
  int i=0;
  for(i=0; i<1000; i++)
  {
    a[i] = -1-i;
  }
  printf("%d",strlen(a));
  return 0;
}

一、字符与ASCII码表

早在我们第一次开始学C语言的时候就去了解了ASCII码表,当时也就是稍微了解了一下几个特别的:

ASCII码为0 代表字符'\0',也代表空指针NULL。

ASCII码为48 代表字符'0',往后依次+1就可以找完所有的1 2 3 4 5等。

ASCII码为97 代表字符'a',往后依次+1可以找完所有小写字母,97-32是大写字母A,依次+1可以找完所有大写字母。

二、字符作条件

在我们仅以字符作为条件的时候,实际上有个映射的关系,比如我们在写模拟实现strncat吧:

写while循环的时候,肯定是想的是cat嘛,就得从dest指向的字符串的末尾的'\0'开始替换,条件写的意思是dest不指向'\0'你就一直++,实际上直接写一个*dest就可以,因为'\0'在while了,if了这些语句的条件里写的话就会映射为数值,也就是相对应的ASCII码值。ASCII码表里我们认识到的唯一一个ASCII码值为0的就是'\0',如果*dest == '\0'那不判断为假就直接退出了,跟我们的要求的循环条件一致。

一句话,单独的字符在条件判断中看的是ASCII码,为0则为假,其它的为真。

三、字符初始化的区分

其实就一个事,那就是0的问题。

认清楚,如果真的要初始化'\0'的话,有两种方式:

老老实实赋值'\0'这个字符:

另一种:

这里你给的是数值,那么我就当成ASCII码,也就是给a初始化了个'\0'。

我当时学的时候其实也没啥问题感觉,不就是数值就是ASCII码,然后字符就是字符呗。

这篇文章开始就给出来了一个题:

有俩个考点吧:

1.char的范围(在VS中就是signed char的范围)

一个图:

a这个数组存的数据都是char,所以你从-1开始存就是:
-1 -2 -3 ...... -128 127 ... 0后面都是循环,然后直至存够1000个。

2.strlen的实质

strlen就是从你给的起始位置(也就是strlen的参数的位置)疯狂往后找,直至找到'\0',然后算'\0'前到底有多少个字符。

3.char里面存的是什么,怎么找到'\0'

和前俩相比,这个好像显得微不足道了,但在写这篇文章前我自己都还没有理清,给a[i]赋值的时候用的是什么-1 - i,而i是什么,是一个整型,你往char里面存个数值存的不就是ASCII码吗,

就像你的char a[1000]初始化一样:

单甩个char a = 0;说不定还能想清,你算了上面那两步以后对这个事不坚定就会跟我想的一样,存的是0,去哪找'\0',这题不就没法算了吗,都成随机值了。

因为存的就是数值0,数值0对应ASCII码表就是'\0'所以从-1到0一共256个元素,不带0,就是255:

相关文章:

  • LlamaIndex学习
  • Fiddler为什么可以看到一次HTTP请求数据?
  • 项目班——0408
  • 【神经网络】python实现神经网络(四)——误差反向传播的基础理论
  • AI与我共创WEB界面
  • 风丘年度活动:2025年横滨汽车工程展览会
  • java中常用的集合 - 面试篇
  • 【NIO番外篇】之组件 Selector
  • 【Redis】布隆过滤器应对缓存穿透的go调用实现
  • malloc、operator new、new的关系
  • c语言练习4
  • NO.92十六届蓝桥杯备战|图论基础-最小生成树-Prim算法-Kruskal算法|买礼物|繁忙的都市|滑雪(C++)
  • 常见攻击方式及防范措施
  • 基于PHP的酒店网上订房系统(源码+lw+部署文档+讲解),源码可白嫖!
  • Oracle数据库数据编程SQL<9.3 数据库逻辑备份和迁移Data Pump (EXPDP/IMPDP) 导出、导入补充>
  • 视觉slam框架从理论到实践-第一节绪论
  • C语言编译预处理3
  • 展示数据可视化的魅力,如何通过图表、动画等形式让数据说话
  • 面试篇 - GPT-3(Generative Pre-trained Transformer 3)模型
  • 探索QEMU-KVM虚拟化:麒麟系统下传统与云镜像创建虚拟机的最佳实践
  • 普京呼吁乌方响应和平倡议,称将分析民用设施停火提议
  • 碎片化时代如何阅读?巴金图书馆推出世界读书日系列活动
  • 长安汽车辟谣抛弃华为,重奖百万征集扩散不实内容的背后组织
  • 特朗普:乌克兰问题谈判短期内若无进展美将不再斡旋
  • 北京一季度GDP为12159.9亿元,同比增长5.5%
  • 工信部:加快推进6G技术研发等,前瞻布局和培育面向6G的应用产业生态