在準備字符串相關的編程題練手的時候,編程過程中發現了一個小問題
代碼一:
char *mystrcpy(char *str, const char* src)
{
if(str == NULL || src == NULL)
return NULL;
char *addres = str;
while(*src != '\0') //[1]
*str++ = *src++;
return addres;
}
代碼二:
char *mystrcpy(char *str, const char* src)
{
if(str == NULL || src == NULL)
return NULL;
char *addres = str;
while((*str++ = *src++) != '\0'); //[2]
return addres;
}
這兩個都是字符串拷貝函數,兩個代碼是有微小差異的!
int main()
{
const char *src = "world";
char str[] = "helpo world";
char * p = mystrcpy(str, src);
show(p);
return 0;
}
差異在代碼有註釋!
while(while((*str++ = *src++) != '\0');
看不懂這行代碼,可以先看個簡單的好描述的代碼
int i = 0;
while(i++ < 10);
printf("%d\n",i);
這個代碼輸出i爲11, i++沒有出又括號前i的值是沒有加一的,出了右括號i的值纔會進行加一操作,可以在ide中或者用gdb調試一下
字符串拷貝函數就是這樣,while((*str++ = *src++) != '\0'); 這行代碼將'\0' 拷貝給str,出了循環的右括號後str進行加一,循環結束。
++i,則是加加後直接把值賦給i
堅持✊