[英]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.