C語言的字串輸出puts()函式
puts()函式很容易用,只需把字串地址作作為引數傳遞給它就可以了。下面我們一起來學習一下吧!
puts()函式有兩個特點:
puts()在顯示字串時會自動在其末尾新增一個換行符。 puts()遇到空字元時就停止輸出,所以必須確保有空字元。
下面兩個示例分別說明puts()的兩個特點。
示例1:
1234567891011121314151617 | /* put_out.c -- using puts() */ #include <stdio.h> #define DEF "I am a #defined string." int main( void ) {
char str1[ 80 ] = "An array was initialized to me." ;
const char * str2 = "A pointer was initialized to me." ;
puts( "I'm an argument to puts()." );
puts(DEF);
puts(str1);
puts(str2);
puts(&str1[ 5 ]);
puts(str2+ 4 );
return 0 ; }</stdio.h> |
該程式的輸出如下:
123456 | I'm an argument to puts(). I am a #defined string. An array was initialized to me. A pointer was initialized to me. ray was initialized to me. inter was initialized to me. |
如上所示,每個字串獨佔一行,因為puts()在顯示字串時會自動在其末尾新增一個換行符。
示例2:
123456789101112 | /* nono.c -- no! */ #include <stdio.h> int main( void ) {
char side_a[] = "Side A" ;
char dont[] = { 'W' , 'O' , 'W' , '!' };
char side_b[] = "Side B" ;
puts(dont); /* dont is not a string */
return 0 ; }</stdio.h> |
下面是該程式的一個示例,可能每次執行結果都不一樣,不同的.編譯器輸出的內容有可能不同:
1 | WOW!Side A |
puts()如何知道在何處停止?該函式遇到空字元時就停止輸出。由於dont缺少一個表示結束的空字元,所以它不是一個字串,因此puts()不知道何處停止。它會一直列印dont後面記憶體中的內容,直到發現一個空字元為止。為了讓puts()能儘快讀到空字元,我們把dont放在side_a和side_b之間,上面是該程式的一個執行示例,不同的編譯器輸出的內容有可能不同
通常記憶體中有許多空字元,如果幸運的話,puts()很快就會發現一個。但是這樣做是不靠譜的!