1个中文字符,占两个字节,相当于2个char,2个英文字符
数组在内存中是按行存储的。
// 中文汉字字符\0
str[0] 指向 中 的首字节, 打印str[0],输出 中文汉字字符【%s遇到 结束符‘\0’ 停止】
str[1] 指向 汉 的首字节, 打印str[1], 输出 汉字字符
str[2] 指向 字 的首字节,打印 str[2], 输出 字符
// 中文\0汉字\0字符\0
str[0] 指向 中 的首字节, 打印str[0],输出 中文【%s遇到 结束符‘\0’ 停止】
str[1] 指向 汉 的首字节, 打印str[1], 输出 汉字
str[2] 指向 字 的首字节,打印 str[2], 输出 字符
中文占两个字符位,但是字符串的末位都要有\0的位置,否则会出现乱码或者其他形式的输出。
所以您第一张图的[4]是不够两个汉字和一个\0使用的,会输出意外的结果,不过为什么以您图中这种格式呈现我还没有过研究。不过换成[5]也就可以了。
前后台系统适用于一些程序流程简单、实时性要求不高的场合,其中的前台一般就是中断系统,后台是主函数里面的大循环,这里以C语言为例,列出程序框架如下:
void main()
{
InitAll(); //初始化所有相关外设、变量等
while(1)
{
process(); //后台处理程序
}
}
上面的代码是典型的后台程序框架,在初始化的子函数中,一般要初始化一些必要的外设(以stm32为例,比如外部中断、定时器中断等中断系统相关寄存器的配置,还有其他必要的外设比如串口、DMA、ADC、DAC等),然后启动中断系统。
InterruptHandler1(){
process();
}
InterruptHandler2(){
process();
}
······
InterruptHandlern(){
process();
}
上面的代码是典型的前台程序框架,前台系统,顾名思义,就是对一些事件起到应答作用,从而达到实际应用中的某些需求。举个例子,在一个采集图像信息的嵌入式系统中,如果是手动采集图像,那么一般会有一个按键去触发开始采样,或者又有其他的按键提供切换某些功能,这时这些按键就可以接到单片机的外部中断引脚上,通过触发中断,改变单片机的工作方式。