C語言學習筆記(8)

來源:互聯網
上載者:User

1. 字串入門

字串也稱字串字面量,是用一對雙引號括起來的字元序列。

我們也許經常會遇到字串特別長的情況,在C#中,我們一般會用@符號來表示。

    Console.WriteLine(@"Hello
World");

 

但是在C中,我們會這樣來寫:

int main()
{
printf("Hello "
"world");
return 0;
}

還記得我曾經講的最多的一句話就是,把字串當做字元數組來玩。

其實在本質上,C語言就是把字串作為字元數組來處理,當C語言編譯器遇到長度為N的字串時,它會為字串字面量分配長度為N+1的記憶體空間。之所以為N+1,是因為在字串的末尾以’\0’來結尾,來標識字串的結束。

既然,我們說字串在編譯器中以字元數組來處理,那麼編譯器自然會將其看成char *類型的指標。也就是說,我們可以這樣來寫:

int main()
{
char *str="abc";
printf("%s",str);
}

2. 字元數組和字元指標

這樣的兩個聲明:

char str1[]="abc";
char *str2="def";

前者是普通的字元數組,後者是字元指標。兩者都可以用作字串,但是他們是不一樣的。

聲明為數組時,就像其他常規的數組一樣,可以隨意修改數組中的元素,即字串中的字元。但是用字元指標,我們是不能修改的。

另外,聲明為數組時,我們知道我們不能將這個數組名賦給其他的數組,但是如果用指標,我們則可以將該指標指向其他的字串。

用最簡單的例子來說明:

char str1[]="abc";
char *str2="def";
*str2='q'; //Error
str1[0]='q';

前者是錯誤的,後者是正確的。

3. 聲明字元數組的慣用法

看段代碼就OK了

#define STR_LEN 10

int main()
{
char str[STR_LEN+1];
}

在宏定義處強調的是字串的大小,而在聲明字元數組的時候,將宏定義加1,因為要儲存”\0”。

4. 字串的輸入輸出

字串的輸出方式有兩種,printf和puts,下面的例子足以說明他們的區別:

int main()
{
puts("Hello world");
printf("Hello world");
return 0;
}

運行結果如下:

答案就是一個有換行,一個沒有換行。

讀取字串也有兩個方法:scanf和gets函數。

我們來說下他們的區別:

scanf會忽略掉之前所有的空白字元,然後讀取所有字元,直到遇到空白字元位置。總之,scanf不會包含任何空白字元,包括空格,定位字元等等。

gets不會忽略空白字元,讀取所有字元,直到遇到分行符號為止。

舉個例子吧:

int main()
{
char str1[100];
scanf("%s",str1);
printf("printf的?結á果?:%s",str1);
}

 

int main()
{
char str2[100];
gets(str2);
printf("gets的?結á果?:%s",str2);
return 0;
}

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.