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條評論
主站蜘蛛池模板: 日本特黄在线观看免费 | 日本精品视频 | 久久精品7 | 日日夜夜精品免费视频 | 国产婷婷色一区二区三区 | 国产边打电话边被躁视频 | 久久久久亚洲精品一区二区三区 | 久久99精品九九九久久婷婷 | 波多野结衣av1区2区3区 | 亚洲视频中文字幕在线观看 | 夭天干天天做天天免费看 | 开心久久婷婷综合中文字幕 | 香蕉成人国产精品免费看网站 | 久久精品国产99精品最新 | 亚洲伦理一二三四 | 日韩欧美一卡二区 | 国产福利不卡 | 天天插天天干天天射 | 美女做羞羞 | 日韩欧美在线观看成人 | 老湿机午夜影院 | 亚洲欧美精品一中文字幕 | 天天干天天操天天插 | 精品日韩在线视频一区二区三区 | 亚洲日本人成中文字幕 | 日韩精品首页 | 青青青视频自偷自拍视频1 青青青手机版视频在线观看 | 香蕉在线精品一区二区 | 又爽又黄又无遮挡的视频在线观看 | 久久精品国产99久久久 | 伊人久久综合网站 | 久久久精品久久久久三级 | 亚洲综合久久综合激情久久 | 真正全免费视频a毛片 | 久久中文字幕久久久久91 | 国内成人免费视频 | 男人的天堂视频在线 | 欧美精欧美乱码一二三四区 | 午夜影院福利 | 国产福利免费在线观看 | 高清国产美女一级a毛片录 高清国产美女一级毛片 |