为了账号安全,请及时绑定邮箱和手机立即绑定

strcat

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

正在回答

3 回答

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

}

 

0 回复 有任何疑惑可以回复我~
#1

JASON0000 提问者

非常感谢!
2015-06-08 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

空格也算一个字符。

原来的s1也有空格啊。

char s1[10]="hello ";

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

0 回复 有任何疑惑可以回复我~
#1

JASON0000 提问者

前面第一节 在数组初始化中 是这样定义的:数据类型 数组名称[长度n] = {元素1,元素2…元素n}; s1[10]中的‘10’指的不是长度10吗 我有点不明白了
2015-06-08 回复 有任何疑惑可以回复我~
#2

Perona 回复 JASON0000 提问者

是我搞错了,确实是长度。不过strcat()好像是不对长度进行判断的,也就没有数组越界的问题。
2015-06-08 回复 有任何疑惑可以回复我~
#3

菠萝不困

长度是10,但是有11个元素
2015-11-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信