我对C语言很陌生。我试图使用 strcat 函数。
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[]) {
char s1[] = "12345";
char s2[] = "abcde";
strcat(s1, s2);
puts(s1);
puts(s2);
return 0;
}
这个运行正常,但是
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[]) {
char* s1 = "12345";
char* s2 = "abcde";
strcat(s1, s2);
puts(s1);
puts(s2);
return 0;
}
最后一个未能返回结果。为什么两种不同的声明方式在strcat函数中返回不同的结果。提前致谢。
这两个代码片段都会调用未定义的行为。在第一个片段中s1
没有足够的空间容纳六个字符以外的任何其他字符。
在第二个片段中,您尝试修改字符串文字。任何修改字符串文字的尝试都会导致未定义的行为。
Read strcat手册页:
[...] 字符串不能重叠,并且dest
字符串必须有足够的空间来容纳结果。如果dest
不够大,程序行为不可预测;缓冲区溢出是攻击安全程序的最喜欢的途径.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)