2 gw 1024 gw_1024 于 2014.11.23 16:28 提问

strcpy函数赋值时遇到问题

char string[7];

char* str1 = "0123456789";

printf("%s",strcpy( string, str1 ));

为什么数组string的空间小于 字符串“0123456789”,但是依然输出0123456789;
还有strcpy函数是以什么方式进行赋值的?

2个回答

su_xiaoyan
su_xiaoyan   2014.11.23 17:43
已采纳

(1)在运行该代码时,提示Debug Error:Run-Time Check Failure #2 - Stack around the variable 'string' was corrupted.即栈区损坏。
(2)
char *strcpy(
char *strDestination, //目标字符串。
const char *strSource //null 终止的源字符串。
);

strcpy( )是char *类型,接受两个字符串指针参数, 返回的是第一个参数的值,即一个字符的地址。strcpy( )复制 strSource,包括终止 null 字符,按 strDestination指定的位置。 如果源页和目标字符串重叠,strcpy 行为不确定。由于 strcpy 不检查在 strDestination中是否有足够的空间,所以可能会产生缓冲区溢出的问题。

rhy_ustc
rhy_ustc   2014.11.23 16:41

strcpy函数内部无法进行越界检查,它一个字符一个字符复制,直到遇到str1的'\0'结束符。

su_xiaoyan
su_xiaoyan 回复gw_1024: 编译器不同,结果可能会有不同。合理的长度应为string [11]。str1(10位)+字符串终止符'\0'(1位)。
接近 3 年之前 回复
gw_1024
gw_1024 但是我将char string[7];改成char string[6];时 编译器就报段错误,这是什么问题?
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片