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條評論
主站蜘蛛池模板: 欧美5o老妇性xxx | 久久精品在线播放 | 91在线 | 欧美: | 亚洲视频手机在线观看 | 香蕉福利 | 毛片网站在线观看 | 久操福利| 色人阁在线 | se94se亚洲欧美在线 | 香蕉视频成人 | 丁香婷婷成人 | 一级成人生活片免费看 | 特级女人十八毛片a级 | 国产福利99 | 奇米在线视频 | 在线成人毛片 | 欧美大狠狠大臿蕉香蕉大视频 | 一级片在线免费观看 | 精品特级一级毛片免费观看 | 亚洲高清在线播放 | 久久精彩免费视频 | 欧美日韩国产一区二区三区播放 | 二区国产| 免费网站成人亚洲 | 国产69精品久久久久99不卡 | 国产成人精品一区二三区 | 亚洲狠狠 | 亚洲久热 | 国产图片综合 | 人人干操| 伊人天天躁夜夜躁狠狠 | 欧美国产日韩911在线观看 | 完整日本特级毛片 | 奇米影视大全 | 国产成人精品男人免费 | 久久精品香蕉视频 | 欧美综合一区 | 亚洲日本综合 | 福利姬在线视频国产观看 | 亚洲国产一成人久久精品 | 91视频免费播放 |