[英]Using strcpy() function in C
我現在是編程新手,正在學習我們學院教授給我們的 C 語言。 我對頭文件#include<strings.h>
下strcpy()
function 的實際功能有疑問
下面給出這個function的一般用途——
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[] = "google";
char *b = (char*)malloc((strlen(a) +1)*sizeof(char));
strcpy(b,a);
printf("%s, %s\n", a, b); //prints google, google
free(b);
}
我們得到以下格式和相同的原型:
char *strcpy( char *to, const char *from)
{
char *temp = to;
while (*to++ = *from++);
return temp;
}
我對此有幾個疑問-
function 中的額外指針 ( temp ) 要求是什么? 我們不能return to;
在 function 的末尾?
我說服自己使用了 temp 變量,因為在每個 while 循環期間, to
的指針都會自行改變。 即首先*to
將被分配*from
然后to = to +1
,並且from = from +1
將發生,這將導致存儲在指針中的地址更改to
。 但如果這是真的,那么指針from
呢? 會,它在strcpy()
function 的末尾也不會改變嗎?
function 在哪里返回存儲在 temp 中的地址? ( function 只有在b = strcpy(b,a);
時才應該工作,不僅要提到strcpy(b,a);
)
為了檢查給定的 function,我還制作了自己的 function “strcpy_me”,並以相同的格式和原型使用它,並給出了相同的結果。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *strcpy_me( char *to, const char *from)
{
char *temp = to;
while (*to++ = *from++);
return temp;
}
int main()
{
char a[] = "google";
char *b = (char*)malloc((strlen(a) +1)*sizeof(char));
strcpy_me(b,a);
printf("%s, %s\n", a, b); // prints google, google
free(b);
}
請幫我澄清我的疑問。
見2
strcpy 的實現要求返回一個指向目標字符串開頭的指針。 因此,如果您想以與strcpy
相同的方式實現 function,則必須保存作為參數傳遞的原始指針的副本,以防您打算在 function 中更改該參數。 這不是一個特別有用或合理的功能,但 strcpy 從一開始就是這樣。
不明白你的意思; 這里很明顯: return temp;
return to;
是錯的。 您必須意識到 function 返回一個值,無論調用者是否使用該值。 嚴格的編譯器可能會警告“未使用來自 function 的值”,在這種情況下,您必須編寫(void) strcpy(a,b);
讓它沉默。 由於您的示例不使用返回的值,所以它是錯誤的並不重要。
你認為沒有。 2 是正確的。
from
確實發生了變化,但我們不需要from
的先前值。 to
存儲在temp
as to
的原始值應該返回,所以我們需要它但不需要from
。
不,你不需要這樣做。 您可以忽略 C 中的返回值(在大多數情況下也沒有警告)。 沒有返回工作,因為執行*to = *from
也會更改參數的 memory,在這種情況下,b。 所以, *to = *from
直接改變數組b
。 這是因為to
和b
存儲相同的 memory。
注意:在您的 while 循環中,它是*to++ = *from++
。 它使用后加法,為簡化起見,我沒有在此處包括在內,但它所做的只是在操作to
前后遞增from
正如我在 3 中所說,您不需要返回值。 事實上,因為 original to
和temp
指向與b
相同的 memory ,所以 function 返回b
本身。 這樣做, b = strcpy_me(b, a)
與:
strcpy(b, a); b = b; //b's value stays the same
是的, return temp;
在我看來絕對是垃圾。 它只會引起混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.