strcpy()实现..如何初始化函数本身中函数的传递指针

时间:2014-03-04 19:05:09

标签: c string pointers strcpy

我正在尝试实现strcpy()标准函数,作为一个函数,它指向两个字符并且不返回任何内容。

我已经完成了正确的工作,但为了避免分段错误,我必须在将主要函数分配给strcpy()函数之前初始化“dest”指针。我试过在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;
}

5 个答案:

答案 0 :(得分:3)

间接只是单向的。除非传递其地址或向其返回值,否则无法更改指针。

答案 1 :(得分:1)

您无法更改API的签名。

答案 2 :(得分:-1)

您可以将您的功能声明为

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

它将解决这个问题

  

可能是一个传递指向strcpy()指针的解决方案   功能,但我希望它像标准功能一样,服用   指向字符的指针而不是指向指针的指针。

答案 3 :(得分:-1)

为什么你不能这样做?

#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'。

当然,您必须小心并确保在任一场景中释放内存......但您应该能够在函数中分配内存。

答案 4 :(得分:-1)

仅对此做出响应: 我正在尝试实现strcpy()标准函数,作为一个函数,它指向两个字符并且不返回任何内容。< / em>的

如果第一句话是您真正想要的的准确表示,那么 然后在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);
}  

这很简单,但是通过一些错误检查,它会按照您在介绍句中描述的那样进行。