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