簡體   English   中英

在 C 中使用 strcpy() function

[英]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;
}

我對此有幾個疑問-

  1. function 中的額外指針 ( temp ) 要求是什么? 我們不能return to; 在 function 的末尾?

  2. 我說服自己使用了 temp 變量,因為在每個 while 循環期間, to的指針都會自行改變。 即首先*to將被分配*from然后to = to +1 ,並且from = from +1將發生,這將導致存儲在指針中的地址更改to 但如果這是真的,那么指針from呢? 會,它在strcpy() function 的末尾也不會改變嗎?

  3. 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);   
}

請幫我澄清我的疑問。

  1. 見2

  2. strcpy 的實現要求返回一個指向目標字符串開頭的指針。 因此,如果您想以與strcpy相同的方式實現 function,則必須保存作為參數傳遞的原始指針的副本,以防您打算在 function 中更改該參數。 這不是一個特別有用或合理的功能,但 strcpy 從一開始就是這樣。

  3. 不明白你的意思; 這里很明顯: return temp;

  4. return to; 是錯的。 您必須意識到 function 返回一個值,無論調用者是否使用該值。 嚴格的編譯器可能會警告“未使用來自 function 的值”,在這種情況下,您必須編寫(void) strcpy(a,b); 讓它沉默。 由於您的示例不使用返回的值,所以它是錯誤的並不重要。

  1. 你認為沒有。 2 是正確的。

  2. from確實發生了變化,但我們不需要from的先前值。 to存儲在temp as to的原始值應該返回,所以我們需要它但不需要from

  3. 不,你不需要這樣做。 您可以忽略 C 中的返回值(在大多數情況下也沒有警告)。 沒有返回工作,因為執行*to = *from也會更改參數的 memory,在這種情況下,b。 所以, *to = *from直接改變數組b 這是因為tob存儲相同的 memory。

注意:在您的 while 循環中,它是*to++ = *from++ 它使用后加法,為簡化起見,我沒有在此處包括在內,但它所做的只是在操作to前后遞增from

  1. 正如我在 3 中所說,您不需要返回值。 事實上,因為 original totemp指向與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM