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

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統 1792 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條評論
主站蜘蛛池模板: 贺州市| 班戈县| 仁寿县| 建阳市| 新龙县| 深水埗区| 武强县| 比如县| 闸北区| 寻乌县| 临江市| 屏东县| 新安县| 珲春市| 冕宁县| 都昌县| 宣威市| 桐城市| 安顺市| 布拖县| 曲沃县| 偃师市| 若尔盖县| 塔城市| 正镶白旗| 闻喜县| 大石桥市| 长海县| 洛川县| 玉门市| 长顺县| 永平县| 石狮市| 合肥市| 平泉县| 镇远县| 长兴县| 新竹市| 宁安市| 且末县| 资兴市|