首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要理解char * strcpy (char *C 1,const char *C 2)是如何在C中工作的。

需要理解char * strcpy (char *C 1,const char *C 2)是如何在C中工作的。
EN

Stack Overflow用户
提问于 2018-11-19 19:43:51
回答 2查看 211关注 0票数 0

无法了解使用char * strcpy (char *cad1, const char *cad2)的方法是如何在这个示例中使用C语言的:

代码语言:javascript
复制
'char * strcpy (char *cad1, const char *cad2){
        char *aux = cad1;
        for( ; *cad1++ = *cad2++; );
        return cad1;
 }'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-19 23:56:05

从方法签名或原型开始,这说明了它是如何工作的:我们有两个参数以及它们各自的类型和返回类型。本例中的所有参数都是char的指针,更称为char指针。这些字符指针是在"C“中作为字符串使用的。一个参数是const,因为该值不能在函数中更改,它必须保持原始值。"C“中的字符串有一些特性,一旦指针被创建到字符串,它总是指向字符串中的第一个字符或索引0,与char *v = var相同,并且可以通过字符串中的下一个字符(如v++ )递增。"C“的另一个特点是由char数组表示的所有字符串都以0字符结尾(ASCII null = 0)。

strcpy版本帐户在该概念上,并创建一个for循环来将char * code 2中的每个元素复制到*code 1中,在调用函数之前必须静态或动态地分配变量(malloc),而上面代码中函数的返回是指向原始变量的指针(在这种情况下,*cad1通常返回复制的变量)。在您的函数中,它被更改了,我的意思是它是返回原始的,而不是复制的,因为您在aux中捕捉到指向复制变量的第一个元素的指针,并且没有使用它。

一个值得注意的好点是for循环:

代码语言:javascript
复制
for( ; *cad1++ = *cad2++; );

它的工作方式很棘手,第一个有趣的地方是for循环有树参数,而在"C“中,所有这些都是可选的。第一个是初始化,第二个是继续迭代的布尔条件,最后一个是增量或递减。接下来,棘手的是*cad1++ = *cad2++是一个布尔表达式吗?答案是肯定的。因为在"C“中,0(零)值是false,其他的值都是true。请记住,"C“中的字符串总是以0(0)结尾,所以当计算指针的值并将指针的值赋值给副本时(使用*C 1将返回指针变量所指向的值,begin中的星号就会产生这种魔力),并到达字符串的末尾,返回false并完成迭代循环。这里有一点是有趣的,首先,在这种情况下,求值的优先级低于赋值,首先将值复制到复制变量,然后计算布尔表达式。

"C“是这样的--您编写的代码很小,其背后有很大的意义。我希望你已经理解了这个解释。有关更多信息,请在"C“指针中查看:pointers.htm

票数 0
EN

Stack Overflow用户

发布于 2018-11-20 00:04:31

代码语言:javascript
复制
char * strcpy (char *cad1, const char *cad2){

for( ; *cad1++ = *cad2++;); 
return cad1; 
}

它的工作方式,在调用端,可以用两种方式使用,但总是需要一个缓冲区来写,所以使用是simmilar。

代码语言:javascript
复制
 char arr[255];
 memset(arr,0,sizeof(char) * 255); // clear the garbage initialized array;
 strcpy(arr, "this is the text to copy that is 254 characters long or shorter.");
 puts(arr);

代码语言:javascript
复制
 char arr[255];
 memset(arr,0,sizeof(char) * 255);
 puts(strcpy(arr,"hello C!"));

感测函数返回指向缓冲区的指针,这也是工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53381595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档