字元陣列(字串)宣告
字串的宣告使用雙引號將其包裹,其等效的宣告方式為每一個字元的組成再加上空白字元 NULL ( 也就是 '\0' ) 的陣列
一種更簡便的宣告方式為使用指標變數(關於指標將於後續文章中敘述)的方式進行宣告,其指向存放在記憶體中某個位置的字串
第 7 與 8 行的宣告方式等價,其 sizeof 的結果皆為 4 bytes 的原因在於它回傳的是 "指標變數的長度" 恆為 4 bytes 。
#include "stdio.h"
int main(void) {
const char color[] = "blue";
const char color1[] = { 'b', 'l' , 'u' , 'e' , '\0' };
const char* color2 = "orange"; //以指標變數來宣告一個字串
const char *color3 = "white"; //以指標變數來宣告一個字串
printf("%s,%d\n", color, sizeof(color));
printf("%s,%d\n", color1, sizeof(color1));
printf("%s,%d\n", color2, sizeof(color2));
printf("%s,%d\n", color3, sizeof(color3));
return 0;
}
回顧前述可知
字串在宣告的時候可以指定為一個字元陣列 char name[] ;或一個型別為 char* 的指標變數
注意:若嘗試列印出一個不具有空白字元 '\0' 的字串會導致錯誤(當機)
也就是說欲使用 printf 函數列印出一個字串,則該字串的最後一個字元必定(須)為空白字元(或稱結束字元 NULL) '\0'
我們可以用 isprint 函數來檢視這個字元陣列是否含有空白字元(是否符合身為字串的條件)
atoi 將字串轉為 int 型態的數字
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 將字串 nPtr 轉換成 int 型態的數字 */
// 使用方法為 int Number = atoi( const char *nPtr )
const char* string = "-459";
printf("%d", atoi(string) );
return 0;
}
atof 將字串轉為 double 型態的數字
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 將字串 nPtr 轉換成 double 型態的數字 */
// 使用方法為 double Number = atof( const char *nPtr )
const char* string = "533.79";
printf("%.2f", atof(string) );
return 0;
}
sprintf 整數、浮點數轉格式化字串。若成功則回傳字元數量
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 整數、浮點數轉格式化字串。若成功則回傳字元數量(有需要的話) */
// 使用方法為 int Number = sprintf( char *s, const char *format, ...);
char string[80];
int x = 46;
float y = 124.44;
sprintf( string, "x = %d, y = %.2f", x, y);
printf("%s\n", string);
return 0;
}
補充 :
putchar 印出某個字元。並將此字元以 int 型態回傳
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 印出存放在 c 的字元。並將此字元以 int 型態回傳(也就是 字元轉整數) */
// 使用方法為 int Number = putchar( const char c );
const char CHAR = 'A';
int CHAR_in_int;
CHAR_in_int = putchar(CHAR); // 呼叫 putchar 的同時會印出字元
printf("\n%d",CHAR_in_int); // 印出來的數值為 ASCII 字元對應的十進制值
return 0;
}
getchar 從鍵盤讀入"一個字元",並轉換為 int 型態回傳
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 從鍵盤讀入"一個字元",並轉換為 int 型態回傳 */
// 使用方法為 int Number = getchar( void );
int INPUT = getchar();
printf("%d,%c", INPUT, INPUT); // 印出來的數值為 ASCII 字元對應的十進制值
return 0;
}
getchar 不斷讀入字元直到讀取到換行字元 '\n' (也就是Enter),再依序列印各個字元的 int 值
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 從鍵盤讀入"一個字元",並轉換為 int 型態回傳 */
// 使用方法為 int Number = getchar( void );
int INPUT[10];
int i = 0;
while( (INPUT[i] = getchar()) != '\n' ){
i++;
}
for ( int j = 0; INPUT[j] != '\n'; j++ )
printf("%d\n", INPUT[j]); // 印出來的數值為 ASCII 字元對應的十進制值
return 0;
}
puts 印出某個字串並且自動加入換行字元\n 。若成功則回傳一個非零的整數
#include "stdio.h"
#include "stdlib.h"
int main(void) {
/* 從鍵盤讀入"一個字元",並轉換為 int 型態回傳 */
// 使用方法為 int Number =int getchar( void );
/* 印出字串 s 並且會自動加入換行字元\n 。若成功則回傳一個非零的整數 */
// 使用方法為 int Number =int puts( char* s);
char INPUT[20];
int i = 0;
char c;
while ( (INPUT[i] = getchar()) != '\n' ){
i++;
}
INPUT[i] = '\0'; //手動在最後的地方加入 NULL 字元('\0')
puts("不用自己加入換行字元");
puts(INPUT); //只能用來輸出字串,沒有printf格式化輸出的功能
return 0;
}