我知道在使用char数组时,你必须将字符串的长度初始化为字符串+ 1的长度,以便\0
占用
但如果我不考虑\0
strchr如何声称\0
在char数组中,因为这打印"是空终止"
char mark[4] = "mark";
if(strchr(mark, '\0')) {
puts("Is null terminated.");
} else {
puts("Is not");
}
答案 0 :(得分:2)
strchr
并不仅限于,甚至不知道您传递给它的数组的长度,因此会在整个内存中继续存在,直到它找到它的内容为止寻找。
如果您打印strchr
返回的值,您会发现它超出了数组的末尾。
答案 1 :(得分:0)
char mark[4] = "mark";
以上这一行可分为两部分:
char mark[4];
sprintf(mark,"mark");
第一行在内存中保留4个字节,标记名称将返回第一个字节的地址。
第二行(相当于mark =" mark",但在执行期间写入)正在写字符串" mark"到内存,从名为mark的地址开始,这里的问题是你如何写一个字符串你将写入5个字节,所以你将写入保留给变量的4个字节中的4个字符AND将写入一个NULL(0x00) )到第5个字节,它不属于变量!
如果您在mark变量之后分配了另一个变量,那么在编写字符串时可能会损坏它,因为它会侵入此变量地址并覆盖它。