C语言字符串末尾空字符记录
C语言中字符串的存储方式记录
一直以来,对于C中的字符串存储的形式模模糊糊的,所以经常会有越界的错误发生,
这几天静下心来,看了看基本C的参考书,现在记录一下对于字符串的存储,方便自己以后回顾。
例:
…
char test[10];
scanf("%s", char);
这种情况下,如果输入1234567890就会出错了,为什么呢?
换一个输入123456789试试看。
程序并没有问题。
问题其实就在于C对于字符串的存储,对于字符串的最后个存储空间,必须保留一个\0空字符,
也就是说char test[10],我们可以填充其中的9个字符,在最后一定要保留1一个\0,但是这个
空字符我们并不要自己写入,计算机会自己写入。
符号常量使用情况也是这样:
TEST符号常量,用strlen测试出长度为14,可是sizeof出的存储大小是15,原因就是刚才提到的,
由于字符常量没有添加\0,计算机会在末尾给他添加上空字符。
出于好奇,我还测试了下,如果手动加上空字符,情况会如何呢?
在刚才的TEST符号常量后加了个/0,结果很明显,除了自己添加的\0,计算机仍然会再添加一个
\0。