2012年11月9日 星期五

[C語言考題-1]strcpy()實作

Question:已知strcpy函數的原型是 char* strcpy(char* strDest,const char* strSrc);
1.不使用原始函式庫,請實現strcpy函數
2.解釋為什麼要返回char*  -->其實我還是不知道為何要return? 沒return也可以run說...

以下收集幾種"寫"法,目前我的程度還沒辦法明確告訴您哪一個最"好",但都可以執行,請自行參考:

寫法一(網路上最常看到的)
char* strcpy(char* strDest,const char* strSrc)
{
 if((strDest == NULL) || (strSrc == NULL)) //[1]
  throw "Invalid Arguments"; //[2]
 char* strDestCopy = strDest; //[3]
 while((*strDest++ = *strSrc++) != '\0')//[4]
  ;
 return strDestCopy;
}
這裡要注意[4]前面的 \0,大部分轉貼的都是寫/0,會有warning並沒辦法執行。(害我try了一陣子)

寫法二(Wiki)
http://zh.wikipedia.org/wiki/Strcpy
char *strcpy(char *dest, const char *src)
{
  const char *p;
  char *q; 

  for(p = src, q = dest; *p != '\0'; p++, q++)
    *q = *p;
   
  *q = '\0';

  return dest;
}

寫法三(某部落客)
http://vijayinterviewquestions.blogspot.tw/2007/07/implement-strcpy-function.html

char *mystrcpy(char *dst, const char *src)
{
char *ptr;
ptr = dst;
while(*dst++=*src++);
return(ptr);
}
or
char *my_strcpy(char dest[], const char source[])
{
int i = 0;
while (source[i] != '\0')
{
dest[i] = source[i];
i++;
}
dest[i] = '\0';
return(dest);
}

大同小異囉~ 大家參考參考~

2 則留言: