怎么从逻辑上理解用字符数组存放字符串然后输出该字符串虽然我似乎明白了但是感觉还是有些不明白?

说实话,刚学C的时候,char这个概念让我很困惑。
你提到的ASCII表是我第一次看到PC城老板的信的印刷版。
里面密密麻麻的7 位二进制码在当时是非常神奇的——“A”是6 5 ,“a”是9 7 有了这样的对应关系,文本数据作为一个数学问题顿时变得清晰起来。

有趣的是,在Linux系统上输入命令行时,使用char特别直观。
例如,当使用 printf("Hello\n"); 时,转义字符 '\n' 在 ASCII 中是 1 0,但输出时却变成了换行符。
我在调试程序时发现 char c = 0x4 1 ;和 char c = 'A';是完全等价的。
我觉得C语言设计得特别巧妙,直接把字符编码和数值联系起来。

但是当涉及到字符串时,我遇到了一个陷阱。
在一个老项目中,有一个函数,接受一个固定长度的字符串,参数写成char str[1 00];。
结果,调用者传递了 char str[] = "this is too long";,堆栈溢出了。
后来团队将其改为char str[1 00] = {0};,然后手动处理字符串的长度。
这时他们才意识到,C中的字符串设计使用0终止符确实很方便,但是很容易出错。
正如你所说的“abc\0def”,当你在Windows上使用printf输出时,你只能看到“abc”,但是当你切换到Linux的puts时,会显示整个输出。
差异真的很有趣。

汉字比较复杂。
我接了一个用char存储汉字的项目,发现当我使用单字节编码(如GBK)时,“中”字占用2 个字节,但当我使用多字节编码(如UTF-8 )时,“中”字居然占用3 个字节。
那时的调试就像拆盲盒一样——有时会出现乱码,有时又正常。
在捕获数据时,我查看了十六进制代码01 A3 ,不知道它对应的是什么汉字。
后来团队改用wchar_t类型,并配合相应的编码库,问题就解决了。
我个人没有运行过这个领域的4 字节Unicode脚本,但是我听说emojis的内存占用确实很惊人。

现在看来,C语言的字符处理设计简单明了,但是有局限性。
像Python这样的现代语言直接使用str类型,并在内部自动处理不同的编码,使开发更加高效。
不过,说到基础知识,碳弦和C弦机制还是值得深入学习的。

如何将一个字符串输入到一个数组中?

综上所述,字符串的存储方式有以下三种:
1 .声明时直接赋值,如 char str[] = "abcd"; 2 、运行时输入,使用scanf,但注意不要超过数组的长度; 3 . 使用strcpy进行复制,但要确保目标数组有足够的空间。