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