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年前关闭。
            
                    
我正在执行这段代码。

#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