這個首先先解釋下一個很基礎但是卻很重要又常常容易搞混的問題。
char a[]和char*的區別。
《c語言程序設計》(中文版)的解釋挺不錯的,我再大概說一下。
..............................
char ame[] = "nw is the time";
char *pme = "now is the time";
首先說pme是把一個指向該字符數組的指針賦值給pme.這個過程沒有涉及到字符串的復制,只是有指針的操作。pme首先是一個指針,這個指針指向一個字符串常量,這個指針此后可以被修改為指向其它字符串,但是如果修改字符串本身的內容,結果是未定義的。ame是一個存放初始化字符串和空字符的一維數組,數組中的單個字符都是可以被修改的,但是ame是個地址常量,是不可以被修改的,它始終指向這一個字符串。
string.h中定義了很多字符串操作函數,比如strncat,這些函數至少都有兩個參數,第一個參數是目的字符串,第二個參數是源字符串。
關于這個參數的類型到底用哪種,要看相關的參數內容在函數執行完以后是不是會發生改變。如果參數內容發生改變了就要用char[],如果參數的內容不發生改變則兩個都可以用。
比如strncat(s,ct,n),函數的作用是把ct的前n個字符連接到s的后面,最后補上一個空字符。那么顯然執行完以后s的內容是變化了的,所以定義s是必須是char s[80],不能是char *s,對于ct來說內容沒有發生變化,怎么定義就都可以了。