c语言strcpy函数的示例,c语言中的strcpy函数讨论

strcpy函数的原型是

char *strcpy(char *strDest, const char *strScr)

{

char *address=strDest;

assert((strDest != NULL) && (strScr != NULL));  //是判断传进来的指针是否为空 如果为空返回一个错误值

while(*strScr)                   //是while(*strScr != ’\0’)的简化形式;

{

*strDest++ = *strScr++;

}

*strDest = '\0';                       //当strScr字符串长度小于原strDest字符串长度

return address;                      //时,如果没有改语句,就会出错了。

}

可能在大多数人用strcpy函数时,都会有个约束,就是原字符串的长度要小于要拷贝目标字符串的长度,也就是*strScr小于

*strDest,我们在定义字符串时,就会赋予其长度。

例如:

char str_dest[20];

char str_scr[10];

strcpy(str_dest, str_scr);

这样就把str_scr字符串中的内容拷贝到str_dest字符串中了

可是有时候我们会不小心把*strScr的长度大于*strDest的长度了 这时会有什么效果呢

就比如:

char str_dest[10];

char str_scr[20];

strcpy(str_dest, str_scr);

我的验证是,程序并不好报错,它会继续输出str_scr中的内容;

举个简单的例子:

# include # include int main()

{

char str1[3];

char str2[20]={"this is a test"};

strcpy(str1, str2);

printf("%s\n", str1);

return 0;

}

运行结果: this is a test

这时我们会把目光注视到原函数上,我们发现strcpy的原函数并没有加两个字符串长度的限制条件,它只是把原字符串中的内容

一个一个地赋值到目标字符串中,而且到最后还给目标字符串加上了结束符“\0”。那么如果目标字符串长度不够时会怎么样呢

? 笔者认为 它会继续一个一个地赋值字符。 拿上面的例子 str1[3], str2[20]="this is a test", str2往str1里赋值。当

str2里的thi 到s 的时候,str1的长度不够了,但是数字中的地址是连续的,比如str1的首地址是1000,那么str1[0]

=1000,str1[1]=1001,str1[2]=1002, 这个时候还要继续往str1里赋值,怎么办,地址还会继续增加的,那么继续增加的地址是我

们没有申请的空间的,这样的话就会很危险的,如果没有申请的地址空间没有被系统占用还好,如果被系统占用的话系统可能就

会崩溃的,所以在使用strcpy函数时要小心谨慎, 原字符串长度要小于目标字符串的长度。

你可能感兴趣的:(c语言strcpy函数的示例)