malloc用strlen()的返回值分配内存的问题
下面的代码能正常编译:int main(void){
char* a="0123456789";
int i=strlen(a);
printf("%s=%d\n",a,i);
char* b=(char*)malloc(10*sizeof(char));
strcpy(b,a);
int j=strlen(b);
printf("%s=%d\n",b,j);
}
结果是:
:~/$ ./test
0123456789=10
0123456789=10
但问题是,用strlen()得到的字符串上度是不包含‘\0’的,而strcpy会把'\0'加到字符串后面。
那为什么strcpy(b,a)不会内存溢出?
小程序, a 字符串后面的 '\0' 确实保存在 b 缓冲区不可以控制位置,不过该位置并没有其它变量访问,并且你的程序立即退出了,这时操作系统并不会报 内存溢出的。 那为什么strcpy(b,a)不会内存溢出?
溢出了呀,但溢出属于未定义行为,未定义行为就是一切都有可能 补充一点,malloc的内存一般是8、16等字节对齐的,你10个字节就不会暴露问题了。 错误的使用方式未必会带来错误的结果 老陈73 发表于 2016-05-30 23:21 static/image/common/back.gif
下面的代码能正常编译:
int main(void){
char* a="0123456789";
这个,有个strdup,你man strdup看看。
页:
[1]