一、字符數組:直接使用,不需要引用頭文件
1、初始化:兩種方式
第一種方式,數組中只有五個元素,但是第二種方式,賦予的是字符串常量,而字符串常量在C語言中約定用'\0'作爲字符串的結束標誌,它佔內存空間。這裏的"china"的有效長度爲 5 ,但實際上還有第 6 個字符'\0'。也就是說,當遇到'\0'時,表示字符串結束,由它前面的字符組成字符串。在程序中,常用'\0'來判斷字符串是否結束,因此所定義的字符數組長度應該大於字符串的實際長度,這樣才足以存放相應的字符串,這就是前面爲什麼寫 6 而不是 5 的原因
注意,第二種方式,也就是將字符串常量直接賦值給字符數組僅限於初始化中,在程序中的其他位置不允許這樣!
2、字符數組的輸入輸出
C語言有一批字符串處理函數,其中gets() 和 puts() 函數包含在頭文件 <stdio.h>中,其餘的包含在<string.h>中。
注意:gets( )識別換行符\n作爲輸入結束,因此在使用gets( )前,一定要注意是不是有換行符會影響,如果有的話,應該先用getchar( )接收掉換行符,然後再用gets()
如下:getchar( );
gets(str);
此外,如果不是使用scanf()函數的%s格式或者gets()函數輸入的字符串(因爲這兩種格式會自動在末尾加上’\0’, 而字符串常量在C語言中約定用'\0'作爲字符串的結束標誌),如果沒有’\0’,printf的%s格式和puts()函數會因爲無法識別字符串末尾而輸出一大堆亂碼。
尤其是當使用getchar()來接收時,記得要在字符串末尾加上’\0’。(所以用getchar()或者%c來輸入字符串時,如果輸出的時候要用puts或者%s,那麼一定要記得字符串錄入的結尾要加上’\0’)
例如:
結果
%c也是一樣,
所以輸入:gets() %s 輸出:puts() %s 沒問題。因爲輸入時,那兩個會自動在末尾加’\0’
輸出是%c或者putchar(), 輸入是什麼樣都沒關係,因爲和字符串無關了,只是在輸出字符
但是如果輸入是字符,%c或者getchar(),而輸出想要是字符串puts() %s,那麼一定要在輸入之後成爲每個字符串前,加上’\0’
2、字符數組的相關函數
要用字符數組的函數時,需要加上頭文件#include<string.h>
而C++的STL中的string的頭文件是#include<string> using namespace std;
輸出的時候還是需要用int型數據來接收的,int len=strlen(str);
然後才能輸出,返回的是int類型的字符串中有意義的字符個數。
結果也就是真正的有意義的字符個數:6
直接接上,所以是 I am student 本身因爲str1中am後面有一個空格,所以接上是這樣的,如果是沒有空格,那麼也還是直接接上的,反正直接接在後面,什麼多餘的也不要做就對了
因爲接好了之後賦給str1
二、字符數組:
輸入直到文件末尾:
但是,注意,當在黑框中輸入數據時,並不會觸發EOF狀態,所以需要手動觸發,按crtl+z組合鍵,這時就會顯示一個^Z,再按回車就可以結束while了
codeblock中while(scanf("%d",&n)!=EOF)如何在控制檯終止循環輸入:
執行後,控制檯輸入數字後,先換行,後ctrl+z,再換行可以退出,ps:該方法適用於codeblock,如果是其他編輯器,可以嘗試ctrl+c/d,但在codeblock試了要麼閃退,要麼無效(經過驗證,確實必須這樣!)