天天看點

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

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

一、字元與字元串

  在标準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是一個字元數串,借用一個字元數組存放。兩者的存儲示意圖如下:

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

二、字元串的初始化、指派 【借助字元指針】

  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 方法比較危險。檔案強烈建議不要使用:

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

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

 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

繼續閱讀