阅读 46
在 C 语言中,'\0' 是表示字符
串
结束的特殊
字符,也叫做字符串结束符。因此,在使用 '\0' 表示字符串时,需要先将字符串中的所有字符按照顺序排列好,并在最后一个字符的后面添加 '\0'。例如,如果要定义一个包含字符串 "Hello, world!" 的字符数组,可以这样写:```cchar str[] = "Hello, world!";```
在这个字符数组中,编译器会自动在字符串的末尾加上一个 '\0' 字符,以表示字符串的结束。因此,定义字符数组时并不需要手动添加 '\0' 字符。
s1
里面
的零是 '0' 字符 0, ASCII码值是 48
s2里面的 '\0' ASCII码值是0
char c=0 <==> 等价于 char c='\0';
因为 当字符型作运算的时候,是会转换成 ASCII 码来运算的,所以 c=0 赋值的时候是将ASCII值 0 赋给了 c
而如果 c='0' 则是将 ASCII 值 48 赋给 c
所谓的 strlen() 其实就是下面一段代码:
int strlen(char p)
{
int len=0; while(p++) ++len;
return(len);
这个是运行时生成,你那源串是随机串,里面很可能没有结束 0(你可以用 for 循环输出其中的值看看),这样上面的代码自然就会读内存越界,已经在 strlen() 函数里面出现错误(函数输入错误导致运行错误)。至于 sizeof 没有问题,实际上是因为这个是个 *** 作符,而不是函数,它的值是在编译时生成(一次性),在生成可执行文件中只存在对应的数值,而且它的值只是依据你的变量定义,而不管其它(里面的值是什么,正常异常等),而不是象 strlen() 是在运行时再运转得具体值(可能多次运行)。想得到数组长度应该用sizeof字符串长度用strlen
内存溢出
提交