1. 程式人生 > >C/C++ strcat函式

C/C++ strcat函式

strcat函式用法的一點看法

轉載自: https://blog.csdn.net/u011939264/article/details/51934129

   最近在刷題時碰到了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等都是合法的,指標變數本身和指標變數指向的資料不是一回事。


  •