猿问

C中字符串的问题


/*    若是

    strcat(s2,s3);
    strcpy(s1,s2);
    则无法显示
*/代码这样的话,应该是整个程序都崩溃掉了,因为前面的语句也无法输出

    strcat(s2,s3);
    strcpy(s3,s2);却可以运行,但是s2的内容却为空,长度为0

感觉是s2的空间问题,应该是超出了范围,但是没有报异常却可以运行为什么?

月下狂人wzj
浏览 1275回答 2
2回答

onemoo

你的理解没有错,strcat strcpy 这样的函数需要第一个参数处有足够大的存储空间来容纳后面参数接入的字符串。为什么编译时没有报错呢?从实现角度说,函数将两个参数都视作指向存储空间的指针,但凭指针并不能判断出其指向的空间有多大,函数只能从这两处空间进行操作,一旦在运行中遇到空间不足,就可能会出问题。题外话:C语言指针的设计就是为了灵活,C语言的宗旨是相信程序员,不阻止程序员做他们想做的事。所以就要求程序员对原理有充分的理解,这也是C语言“难”的原因。其实在现实中,这样的错误也很常见,所谓的“缓冲区溢出”漏洞多是存储空间的问题。

月下狂人wzj

厉害,,在请教下, 那为什么将s2复制给s1就直接崩溃;而s2复制给s3是直接将s2空间清0呢??
随时随地看视频慕课网APP
我要回答