繁体   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