问答详情
源自:6-8 字符串函数

strcat

第4个例子 strcat "hello "后面有一个空格  那么拼接后的"hello world"长度不是超过10了 ?

提问者:JASON0000 2015-06-08 15:02

个回答

  • Perona
    2015-06-08 16:08:31
    已采纳

    可能是教材弄混了吧,用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;    
    
    }

     

  • JASON0000
    2015-06-08 16:50:20

    “strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串”,实际发现s1空间不足也可以运行成功,其实已经内存越界了,如果在VC中运行调试即可看到报错,这里的编译器可能对越界访问做了特殊处理。

  • Perona
    2015-06-08 15:13:19

    s1[10]这个数组是长度是11,下标是从0开始的。不要搞混了。

    空格也算一个字符。

    原来的s1也有空格啊。

    char s1[10]="hello ";

    跟s2拼接长度刚好是11啊。