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

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

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

系統 1790 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)?。∫灿袝险f在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元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产特黄一级一片免费 | 亚洲久爱 | 亚欧精品在线观看 | 久久免费视频99 | 欧美在线视频一区二区 | 日本不卡三级 | 午夜黄色影院 | 99在线观看精品 | 日韩一区在线视频 | 国产婷婷高清在线观看免费 | 26uuu精品一区二区 | 日本久久99 | 九九在线精品视频播放 | 黄黄视频免费看 | 亚洲免费一| 精品精品国产自在久久高清 | 天天射综合网站 | 99激情网 | 性色va| 国产免费一区二区三区在线观看 | 国产日韩精品欧美一区色 | 国产一区二区影院 | 久久99国产视频 | 日本亚洲精品一区二区三区 | 亚洲精品人成在线观看 | 图片专区亚洲欧美另类 | 成人短视频视频在线观看网站 | 午夜色站| 国产欧美日韩精品高清二区综合区 | 一级毛片私人影院老司机 | 国产综合色在线视频区 | 久久综合色网 | 国产偷久久 | 欧美大片天天免费看视频 | 亚洲欧美一区二区三区麻豆 | 欧美国产伦久久久久 | 一级a做爰片欧欧美毛片4 | julia中文字幕久久亚洲 | 男人与牛做爰的视频 | 美女色片 | 色婷婷av777 色婷婷国产 |