为什么这两个输出效果不同,数组长度的限制吗

img

img


长度怎么去衡量,关于中文字符串及英文字符串,他们设数组该怎么给空间!

1个中文字符,占两个字节,相当于2个char,2个英文字符
数组在内存中是按行存储的。

  • 第一张截图,二维长度为4,2个汉字正好占4个字节,字符串还多出一个'\0' 没法存。 它实际上是这样存储的
//  中文汉字字符\0
str[0] 指向 中 的首字节, 打印str[0],输出  中文汉字字符【%s遇到 结束符‘\0’ 停止】
str[1] 指向 汉 的首字节, 打印str[1], 输出  汉字字符
str[2] 指向 字 的首字节,打印 str[2], 输出 字符
  • 第二张截图,二维长度为5,2个汉字正好占4个字节,字符串还多出一个'\0',正好够存
//  中文\0汉字\0字符\0
str[0] 指向 中 的首字节, 打印str[0],输出  中文【%s遇到 结束符‘\0’ 停止】
str[1] 指向 汉 的首字节, 打印str[1], 输出 汉字
str[2] 指向 字 的首字节,打印 str[2], 输出 字符

中文占两个字符位,但是字符串的末位都要有\0的位置,否则会出现乱码或者其他形式的输出。
所以您第一张图的[4]是不够两个汉字和一个\0使用的,会输出意外的结果,不过为什么以您图中这种格式呈现我还没有过研究。不过换成[5]也就可以了。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/270842
  • 这篇博客你也可以参考下:解决微信浏览器页面可以随意拉伸,导致页面内部滚动条滚动体验不好的问题
  • 除此之外, 这篇博客: 基于单片机的嵌入式系统的典型的应用程序框架设计中的 在单片机应用程序中,最常用、也是最简单的一种典型框架就是前后台系统,这种框架通常是由主函数里的大循环和一个或几个中断服务程序组成,本文主要讲这种典型框架设计问题。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    前后台系统适用于一些程序流程简单、实时性要求不高的场合,其中的前台一般就是中断系统,后台是主函数里面的大循环,这里以C语言为例,列出程序框架如下:

    void main()
    {
    	InitAll();  //初始化所有相关外设、变量等
    	while(1)
    	{
    		process();  //后台处理程序
    	}
    }
    

    上面的代码是典型的后台程序框架,在初始化的子函数中,一般要初始化一些必要的外设(以stm32为例,比如外部中断、定时器中断等中断系统相关寄存器的配置,还有其他必要的外设比如串口、DMA、ADC、DAC等),然后启动中断系统。

    InterruptHandler1(){
    	process();
    }
    InterruptHandler2(){
    	process();
    }
    ······
    
    InterruptHandlern(){
    	process();
    }
    

    上面的代码是典型的前台程序框架,前台系统,顾名思义,就是对一些事件起到应答作用,从而达到实际应用中的某些需求。举个例子,在一个采集图像信息的嵌入式系统中,如果是手动采集图像,那么一般会有一个按键去触发开始采样,或者又有其他的按键提供切换某些功能,这时这些按键就可以接到单片机的外部中断引脚上,通过触发中断,改变单片机的工作方式。

  • 您还可以看一下 AI100讲师老师的朋友圈爆款背后的计算机视觉技术与应用课程中的 朋友圈爆款背后的计算机视觉技术与应用小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^