第4个例子 strcat "hello "后面有一个空格 那么拼接后的"hello world"长度不是超过10了 ?
可能是教材弄混了吧,用strlen()计算出来的长度确实是11。代码给你,你运行看看。
#include <stdio.h> #include <string.h> int main() { char s1[10]="hello "; char s2[]="world"; strcat(s1,s2); printf("%s\n",s1); printf("%d\n",strlen(s1)); return 0; }
“strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串”,实际发现s1空间不足也可以运行成功,其实已经内存越界了,如果在VC中运行调试即可看到报错,这里的编译器可能对越界访问做了特殊处理。
s1[10]这个数组是长度是11,下标是从0开始的。不要搞混了。
空格也算一个字符。
原来的s1也有空格啊。
char s1[10]="hello ";
跟s2拼接长度刚好是11啊。