我正在尝试实现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;
}
答案 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);
}
这很简单,但是通过一些错误检查,它会按照您在介绍句中描述的那样进行。