關於字符串與字符數組的一些小問題

通常我們爲字符串與字符數組的使用的差異而煩惱,因爲一些細小的差別會帶來一些莫名其妙的煩惱。

好了,下面就開始談談吧,直接進入要點吧,那些基本的就不說了,比如什麼末尾'/0'字符,訪問越界等一些問題就不必討論了,學過的C的人都知道怎麼會事情。

定義一個字符串的方法:

char *string="xxxxxx";

定義一個字符數組的方法:

char string[]="xxxxxx";

看看下面代碼:

void test(char *string)

{

   if(string!=NULL)

         *string='a';

}

int mian(void)

{

   char a[]="abcd";

   char *b="abcd";

   char *c=NULL;

   test(a);//操作合法

   test(b);//操作不合法

}

這裏發現操作test(b)的時候出錯了,其實這裏有需要注意的地方,定義一個字符串的時候,通常分配地址是在代碼段,字符串有const屬性,但是它的指針不具有const屬性,所以我們仍然可以讓這個指針指向其它地址空間。所以test(b)就不合法了。而字符數組則和普通變量差不多,但是數組名有兩重含義,其中一種就是代表字符串的首地址,但是這個地址是個常量,就指向的地址空間不變,指向的內容可變,爲了改變其指針屬性,可以把這樣改變b=a;這樣b的地址和指向的內容均可變了。如果c=b,則c相對b的屬性沒有任何改變。

 

再看看下面一個例子:

 

char*  test()

{

   char a[]="sssssssss";

   char *b="sssssssss";

   char *c=a;

 return a;

 //return b;

//return c;

}

int mian(void)

{

   char *c=NULL;

   c= test();

   puts(c);

}

同樣都是返回了一個字符串的地址,測試發現 return a和return c的時候有問題,return b卻沒有問題,這個說明了什麼問題呢?呵呵好好體會吧!定義一個字符串有它的特殊屬性的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章