はじめに
- これまでの学習に続いて、今回は文字列の基本的なルールについて学んだ結果をまとめてみました。
- 【C】初めてのC言語(1. Hello world)
- 【C】初めてのC言語(2. 四則演算とフォーマット指定子)
- 【C】初めてのC言語(3. ポインタ)
- 【C】初めてのC言語(4. 構造体)
- 【C】初めてのC言語(5. 関数)
- 【C】初めてのC言語(6. 配列)
- 【C】初めてのC言語(7. for文)
- 【C】初めてのC言語(8. 2次元配列)
- 【C】初めてのC言語(9. 関数のプロトタイプ宣言)
- 【C】初めてのC言語(10. 構造体配列)
- 【C】初めてのC言語(11. ヘッダファイル)
- 【C】初めてのC言語(12. 3つのからくり構文+ポインタ演算)
- 【C】初めてのC言語(13. メモリを扱う標準関数)
- 【C】初めてのC言語(14. ヒープの利用)
- 【C】初めてのC言語(15. sizeofの注意点)
学習環境
- 今回はpaiza.ioのC言語のエディタを使いました。
文字列にまつわる業界ルール
- 「C言語の文字列に関する業界ルール」として、以下の2つのルールが挙げられていました。
-
- 先頭要素から順に1文字ずつ文字コードを格納して文字列を表す。
-
- 最後の文字の直後には「文字コード0の文字」を必ず格納し、それ以降のメモリ空間は利用しない。
-
Main.c
#include <stdio.h>
int main(void){
const char str1[10] = "Hello";
const char str2[10] = "He\0llo";
printf("%s\n", str1);
printf("%s\n", str2); // 「\0」が終端文字(ヌル文字)として扱われている。
return 0;
}
実行結果
Hello
He
- 上記のルールを踏まえて、以下の様に「char配列から\0を探しながら1文字ずつ出力」すると、printf関数で文字列を全て出力するのと同じ結果が得られました。
Main.c
#include <stdio.h>
int main(void){
const char* str = "sumomomomomomomomonouchi";
printf("%s\n", str); // 文字列を全て出力
while (*str!='\0') {
printf("%c", *str); // 1文字ずつ出力
str++; // ポインタを1文字分進める
}
return 0;
}
実行結果
sumomomomomomomomonouchi
sumomomomomomomomonouchi
参考URL
-
スッキリわかるC言語入門 第2版
- p.396~p.402