strcat函式用法的一點看法
阿新 • • 發佈:2018-11-26
最近在刷題時碰到了strcat這個函式,一開始沒怎麼理解它的用法,出了錯,現在寫點自己的理解吧。
首先來看兩個小程式
程式碼一: #include<iostream> using namespace std; int main() { char *s="abcd"; char *c="efgh"; strcat(s,c); cout<<s; return 0; } 程式碼二: int main() { char s[100]="abcd"; char *c="efgh"; strcat(s,c); cout<<s; return 0; }
自己先想想這兩個程式碼有什麼區別了,第一感覺是不是就是字串c直接連線到了字串s上呢,如果回答是的,那你也和我一樣中槍了,答案是否定的,第一個是錯的,第二個才是正確的。那麼問題來了,第一個到底錯在哪裡呢,1="abcdefg";
p1="abcdefg";
//p1是一個指向字串的指標,實際上編譯器是這樣做的:根據你初始化此指標時給出的值(此例中就是abcdefg)生成一個字串,然後把這個字串的第一個字元的地址拿出來,讓p1指向它,這樣就OK了。你如果想再改動這個字串,對不起,不可以,因為它已經是定長的了,無法再改動。
char p2[10]=“abcdefg”;
//p2是一個字元陣列的名稱,其實也就是一個指向字元的常量指標,它指向的地址最多可以容納10個字元。
而 strcat 函式的原型如下:
extern char *strcat(char *dest,char *src);
//strcat函式會將src所指向的記憶體空間中的字元連線到dest所指向的記憶體空間後面,這就要求dest所指向的空間足夠大,能夠容納的下src,但前提是dest是可以被修改的char *s=“abcd”;這樣初始化的話,相當於s是常量指標,其指向的內容不能被修改,但是自身可以變,s+1等都是合法的,指標變數本身和指標變數指向的資料不是一回事。
關於我自己
-
一個正派但不正經的程式設計師
-
18年計算機專業碩士畢業生,騰訊SNG部門實習生,現加盟快手科技 ,後端研發工程師一枚
-
喜歡技術,喜歡網際網路
-
民遙控 ,趙雷、陳粒、宋冬野
-
公眾號:程式設計美學,時不時寫篇文章,偶爾數羊,其實說到底,只是想和你聊聊