由while((*strDest++=*strSrc++)!='\0');所想到的

今天跟人討論幾個字符串的問題,其中之一就是strcpy函數的實現。關鍵代碼就是while((*strDest++=*strSrc++)!='\0'),發現了三個小問題,分析以下。c++

1能不能改爲while(*strDest++=*strSrc++)?ide

能夠的,在vs2010下運行沒有問題。由於'\0'能當false用。輸入代碼:函數

if('\0')spa

   printf("hehe");調試

單獨編譯運行這兩行代碼是沒有任何輸出的。字符串

2(*strDest++=*strSrc++)!='\0'到底是用誰的值來和'\0'比較?it

char a[20];編譯

char *str=a;class

char *src=\"abcd\";程序

printf("%c\n",*str++=*src++);

輸出的結果是字符a

*strDest++=*strSrc++整個表達式的值是‘a’。因此(*strDest++=*strSrc++)!='\0'是判斷前面賦值表達式的值是否爲'\0'。既不是*strDest,也不是*strSrc。

單獨調試以下代碼:

int a,b=2;

printf("%d\n",a=b);

輸出結果爲2。若是b不賦值,程序運行錯誤。

3 char *strDest;能直接用嗎?

固然不能。

char *str;

char *src=\"abcd\";

strcpy(str,src);

printf("%s\n",str);

以上代碼編譯有警告,運行會出錯。

若是改爲

char *str="";

char *src=\"abcd\";

strcpy(str,src);

printf("%s\n",str);

運行也會出錯。

解決方法是

char a[20];

char *str=a;

char *src=\"abcd\";

strcpy(str,src);

printf("%s\n",str);

這樣程序能完美運行,輸出結果abcd。

相關文章
相關標籤/搜索