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