字符,字符串,字符數組,指針的混合運用

  時刻提醒自己。學習中,最難的不是技巧,而是對於概念的深入理解。深入理解概念是深入理解原理的基礎。而原理是任何學習中最基礎,最本質的內容。


一、字符與字符串

  在標準C中實際上是沒有字符串這種基本數據類型的。只有字符基本數據類型。需要使用的關鍵字是char

  char ch = 'a';

  需要注意的點有:

  字符是單引號,字符串是雙引號。

  char類型的數據結構,在機器上通常佔用一個字節大小。

  char 類型可以參與整數運算,也可以以整數形式輸出。【注意char的存儲細節】

 在實際的編程過程中,將不可避免的需要使用到字符串。那麼字符串的存儲將必然要借用到字符數組。

  char a[5] = {'h','e','l','l','o'};

  上例是一個典型的字符型數組。嚴格的說,上述字符數組並不能表述一個字符串。因爲沒有“\0”作爲字符串的結束符。

  對字符數組的輸出只能採用:

  for (i = 0 ; i< 5;i++)

    printf("%c",a[i]);

  char str[] = "hello" ;

  對其輸出可以直接採用:

    printf("%s",str);

  str是一個字符數串,借用一個字符數組存放。兩者的存儲示意圖如下:

    wKiom1aoNM6Bm1ZjAABxnQtcXNk738.png 

二、字符串的初始化、賦值 【藉助字符指針】

  char str[] = "hello"  //定義str字符串,並初始化爲hello,是正確的

 

  char str[100];   //這兩句話是錯誤的。str是一個地址常量。值是不能改變的。

  str = "hello";

   

  第二的修正方式可以是:

  char *p;

  p = "hello";   //可以成立,p是指針變量。產生的字符數組的初始地址賦值給了p。也就是p指向了hello這個字符數組。當然也就是一個字符串了。可以p++,指向下一個一個字符。

  

  第三種方式:

  char str[] = "hello";

  char *p ;

  p = str;   //注意,這種方式,p指向了hello這個字符串。str是一個地址值


三、從輸入設備得到字符串

 獲取標準輸入得到字符串的工具有:scanf ;gets;fgets


 scanf 的用法舉例:

 

 char str[10];

 scanf("%s",str);

 printf("%s",str);

 

 注意事項:可能導致數據越界,也就是字符串中的字符個數超過10個,就會產生數據越界。

 scanf判斷數據的輸入結束的標識是:空格,tab;如果:輸入字符串是abc def 那麼str只會獲取到abc

 避免越界的方法:

 scanf("%9d",str); //可以限制字符串的輸入個數


 gets 方法比較危險。文件強烈建議不要使用:

 

 char str[10];

 gets(str); //注意,沒有任何校驗


 fgets的方法是推薦使用的方法

 char str[10];

 fgets(str,10,stdin); //這樣從標註輸入的內容,超過9個字符就會自動截斷。不會產生越界。


 利用指針接受標準輸入

 char *p = malloc(100);

 scanf("%s",p);

 gets(p);

 fgets(p,99,stdin);


四、標準C庫中提供字符處理函數

 strcat   strncat

 strcpy  strncpy

 strcmp  strncmp

 



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