voidmain(){char*p="abcdefg";while(*p++!='c');printf("%c\n",*p);}您猜打印出來的是幾?結果是d。" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

字符串拼接函數strcat的實現 while(*p++ !='\0

系統 1551 0

在研究strcat函數實現的時候,發現了while(*p++ !=‘\0’)的大秘密,也讓我發現了在上篇博客中我犯的一個錯誤。原以為跳出后,P指向'\0',而實際上并非如此!我按跳出后P指向'\0',結果怎么拼接都實現不了,NND。為了驗證這個問題,我們先上個小程序吧:

#include<stdio.h>

void main()

{

char *p = "abcdefg";

while(*p++ != 'c');

printf("%c\n", *p);

}

您猜打印出來的是幾? 結果是d。

為什么呢?

原來*和++的優先級是一樣的,當優先級一樣的時候,程序按自左至右的順序執行。所以當*p = 'c' 或者*p = '\0'時,p仍然要往下移一位, 即p指向滿足條件后的下一個字節。

由于'\0' 結束符,if 、while當會把他判成0,因此程序寫成while(*p++ );效果也一樣,最終程序指向字符串結束符'\0'的下一字節。

如果這樣寫:

while(*p)

p++;

當*p='\0'時,進不到while里面的循環,因此這種寫法跳出循環的時候,p指向的是'\0'。同志們注意了,這樣寫while后面是沒有“;”號的,文章一開始的寫法后面是有“;”號的。

所以明白了這,我們寫strcat就好些了,首先查找目的字符串dst的末尾處,然后復制過去就OK了。

#include <stdio.h>

#include <assert.h>

char *strcat(char *dst, const char *src)

{

assert(dst);

char *dstFirst = dst;

while(*dst++);

dst--;

while(*dst++ = *src++);

return dstFirst;

}


//測試部分

void main()

{

char *str1 = "you must";

char *str2 = "zijuezizhi!";

char *dst = malloc(100);

strcat(strcat(dst, str1), str2);

prinf("%s\n", dst);

free(dst);

dst = NULL; 這個為什么大家指點 奮斗

}

測試結果:you mustzijuezizhi! 一切正常。

char *dst = malloc(100); 這句話也可以這樣寫:char *dst = NULL; dst = (char *)malloc(100);在程序結束處一定要free(dst)啊!也有書上說在dst調用strcat之前,要*dst = '\0',我沒這樣,測試結果也正確。水平有限,有些問題解釋不了,大神看到了指點一二。

這里交代下為甚strcat包括strcpy函數要返回char*類型,通過程序也看到了,返回的是首地址。我們printf打印一個字符串用的參數 就是首地址。因此通過返回首地址可以實現像 strcat(strcat(dst, str1), str2);這種 鏈式調用 。在某些場合很方便。





字符串拼接函數strcat的實現 while(*p++ !='\0')跳出后,p究竟指向哪? C/C++求職面試必備考點(三)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊人国产视频 | 久久桃花网 | 亚洲精品日韩在线一区 | 免费观看黄色 | 91在线视频免费观看 | a级精品九九九大片免费看 a级毛片高清免费视频 | 老潮湿影院免费体验区 | 国产精品久久久久鬼色 | 久久青草国产精品一区 | 亚洲高清美女一区二区三区 | 国产一级视频久久 | 亚洲va欧美va国产va天堂 | 日本免费在线视频 | 日本高清不卡一区久久精品 | 夜夜爱夜夜做 | 成熟性xxxxx 成在线人免费视频一区二区三区 | 亚洲综合首页 | 亚洲国产欧美一区 | 久热99| 我要看欧美精品一级毛片 | 中文字幕欧美日韩在线不卡 | 在线精品日韩一区二区三区 | 国产在线精品一区免费香蕉 | 男人av的天堂 | 色老头网站久久网 | 91尤物国产尤物福利 | 国产日韩一区二区三区在线观看 | 日韩精品一区二区三区中文精品 | 亚洲乱码一区二区三区在线观看 | 四虎国产精品免费久久影院 | 国产高清看片日韩欧美久久 | 欧美成人老熟妇暴潮毛片 | 国产片一级aaa毛片视频 | 亚洲欧美精品久久 | 国产h片在线观看 | 国产精品成人观看视频国产奇米 | 五月天婷婷亚洲 | 欧美一级别 | 成人影院在线观看视频 | 一区二区三区四区在线视频 | 国产精品爱久久久久久久9999 |