This question already has answers here:
Why does this intentionally incorrect use of strcpy not fail horribly?
(5个答案)
Why does strcpy “work” when writing to malloc'ed memory that is not large enough? [duplicate]
(5个答案)
5年前关闭。
我正在执行这段代码。
===========
输出是
str1 =舒萨尼
str2 = himanshusaini
strcpy的工作方式,为什么在str1是源字符串而str2是目标字符串的同时修改了str1。另一方面,str2的输出是完整的源字符串,而str2的大小仅为5个字节。
请协助我这里到底发生了什么。
(5个答案)
Why does strcpy “work” when writing to malloc'ed memory that is not large enough? [duplicate]
(5个答案)
5年前关闭。
我正在执行这段代码。
#include<stdio.h>
#include<string.h>
int main()
{
char str1[]="himanshusaini";
char str2[5];
strcpy(str2,str1);
printf("str1=%s\n str2=%s\n",str1,str2);
return;
}
===========
输出是
str1 =舒萨尼
str2 = himanshusaini
strcpy的工作方式,为什么在str1是源字符串而str2是目标字符串的同时修改了str1。另一方面,str2的输出是完整的源字符串,而str2的大小仅为5个字节。
请协助我这里到底发生了什么。
最佳答案
当我执行此代码时,结果如下
str1 = himanshusaini
str2 = himanshusaini
str1并没有像您所说的那样更改,但是str2 = himanshusaini的原因是因为char * strcpy(char * dest,const char * src)
dest-这是指向要在其中复制内容的目标数组的指针。
src-这是要复制的字符串。
返回值
这将返回一个指向目标字符串dest的指针。
因此,您有一个指向整个字符串的指针,该字符串将由特殊字符'\ 0'终止
要只复制前5个字符,请使用stncpy
#include<stdio.h>
#include<string.h>
int main()
{
char str1[]="himanshusaini";
char str2[6];
strncpy(str2,str1,5);
str2[5] = '\0'; /* null character manually added */
printf("str1=%s\n str2=%s\n",str1,str2);
return 0;
}
关于c - 较小目标数组大小的strcpy函数用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25850991/
10-11 17:11