簡體   English   中英

strcpy()實現..如何在函數本身中初始化指向函數的傳遞指針

[英]strcpy() implementation.. How to initialize a passing pointer to a function in the function itself

我正在嘗試實現strcpy()標准函數,該函數需要兩個指向字符的指針並且什么也不返回。

我已經正確完成了工作,但是為了避免分段錯誤,我必須在將其分配給strcpy()函數之前在主函數中初始化“目標”指針。 我試圖在strcpy()函數本身中進行此初始化,但是無法完成,因為我要通過值發送指針(字符的地址),因此盡管可以更改,但無法在函數中進行更改指針所指向的不是該點本身。

將指針的指針傳遞給strcpy()函數可能是一種解決方案,但是我希望它的行為像標准函數一樣,采用指向字符的指針而不是指向指針的指針。

簡而言之,如何通過初始化strcpy()函數本身而不是main函數中的指針來避免分段錯誤?

我希望我的問題很清楚

這是我的代碼:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void myStrcpy(char *dest,const char *src){

    while(*src)
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest='\0';
}

int main(void){

    char *src="Salahuddin";
    int len=strlen(src);
    char *dest=(char*)malloc(len);


    myStrcpy(dest,src);


    printf("%s",dest);

    return 0;
}

間接僅是單向的。 除非傳遞指針的地址或向其返回值,否則不能更改指針。

您不能不更改API的簽名。

您可以將函數聲明為

void myStrcpy(char *&dest,const char *src)
                    ^   look here!

它將解決這個問題

將指針的指針傳遞給strcpy()函數可能是一種解決方案,但是我希望它的行為像標准函數一樣,采用指向字符的指針而不是指向指針的指針。

你為什么不能這樣做?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void myStrcpy(char *dest, const char *src)
{
    if (dest == NULL) {
        dest = (char *) malloc(strlen(src));
    }

    while(*src) {
        *dest = *src;
        dest++;
        src++;
    }
    *dest='\0';
}

int main(void)
{
    char *src="Salahuddin";
    int len=strlen(src);
    char *dest=NULL;

    myStrcpy(dest, src);

    printf("%s", dest);

    return 0;
}

您也可以使用calloc函數代替malloc ,后者會自動將分配的內存初始化為'\\ 0'。

當然,您必須小心並確保在任何一種情況下都釋放內存...但是您應該能夠在函數中分配內存。

僅對此做出響應: 我正在嘗試實現strcpy()標准函數,該函數需要兩個指向字符的指針並且不返回任何內容。

如果第一句話能准確表達您的真正意願
然后圍繞strcpy() 編寫一個包裝器

int main(void)
{
    char *dest;
    char src[] = {"some string");
    dest = calloc(sizeof(src), sizeof(char));
    myStrcpy(dest, src);
    //use dest
    free(dest);
    return 0;
}

void myStrcpy(char *dest, char *src)
{
    strcpy(dest, src);
}  

這是簡單的操作,但是通過一些錯誤檢查,它將按照您在介紹句子中描述的方式進行操作。

暫無
暫無

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

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