簡體   English   中英

使用指針的strcopy函數不起作用

[英]strcopy function using pointers not working

我需要制作一個函數,該函數接收兩個char指針並將一個指針的內容復制到另一個指針中,然后返回指針的開頭。 我已經弄混了幾個小時,並且已經閱讀了100個完全不同的示例。 這是我現在所擁有的:

char * mystrcpy(char * dest, char * src) {
        while(1) {
          if(*src == '\0') {
            *dest = '\0';
            return dest;
          }
          else {
            *dest = *src;
            *src++;
            *dest++;
          }
        }

您想要的是增加指針,而實際上增加它們指向的字符。

更改

*src++;
*dest++;

至:

src++;
dest++;
dest++;

dest是一個指針,您正在移動它以便從src復制值。因此,當您返回dest它已經指向字符串的末尾。

因此,不要移動該指針,而只是使用索引將值復制到該指針。

int i=0;
while( *src)
{
    dest[i] = *src;
    i++;
    src++;
}

dest[i] = '\0';

return dest;

因此,即使將*dest++修復為dest++ ,返回的內容也不會得到預期的結果。

這兩行:

    *src++;
    *dest++; 

應該:

    src++;
    dest++;

注意,沒有取消對指針的引用,因為代碼需要增加指針,而不是指針指向的對象。

保存dest的初始值是一個好主意,以便可以將其返回。 為了避免丟失dest緩沖區中已有的任何字符串,我懷疑dest的值(保存后)需要增加dest + = strlen(dest);

因此發生了兩個字符串的集中,而不是在dest中覆蓋初始字符串。

在調用該函數之前,應檢查dest緩沖區的長度足以容納兩個字符串+1的strlen()。

+1是允許終止字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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