C プログラミング文字列
C プログラミング文字列
このチュートリアルでは、C プログラミングの文字列について学習します。例を使用して、それらを宣言し、初期化し、さまざまな I/O 操作に使用する方法を学びます。
C プログラミングでは、文字列はヌル文字 \0
で終わる一連の文字です。 .例:
char c[] = "c string";
コンパイラは、二重引用符で囲まれた一連の文字を検出すると、ヌル文字 \0
を追加します。
文字列を宣言する方法
文字列を宣言する方法は次のとおりです:
char s[5];
<図> ここでは、5 文字の文字列を宣言しています。
文字列を初期化する方法
文字列はさまざまな方法で初期化できます。
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};
<図>
別の例を見てみましょう:
char c[5] = "abcde";
ここでは、6 文字を割り当てようとしています (最後の文字は '\0'
です) ) char
に 5 文字の配列。これは悪いことであり、絶対に行うべきではありません。
文字列への値の割り当て
配列と文字列は、C では二流市民です。宣言されると、代入演算子はサポートされません。たとえば、
char c[100];
c = "C programming"; // Error! array type is not assignable.
注: 代わりに strcpy() 関数を使用して文字列をコピーしてください。
ユーザーから文字列を読み取る
scanf()
を使用できます 文字列を読み取る関数。
scanf()
関数は、空白 (スペース、改行、タブなど) に遭遇するまで一連の文字を読み取ります。
例 1:文字列を読み取るための scanf()
#include <stdio.h>
int main()
{
char name[20];
printf("Enter name: ");
scanf("%s", name);
printf("Your name is %s.", name);
return 0;
}
出力
Enter name: Dennis Ritchie Your name is Dennis.
でも デニス・リッチー は上記のプログラムに入力されましたが、"Dennis" のみが入力されました 名前に保存されました ストリング。 Dennis の後にスペースがあったためです。 .
また、コード name を使用していることにも注意してください &name
の代わりに scanf()
で .
scanf("%s", name);
これは name のためです char
です 配列であり、C では配列名がポインターに分解されることがわかっています。
したがって、名前 scanf()
で すでに文字列の最初の要素のアドレスを指しているため、 &
を使用する必要はありません .
テキスト行の読み方
fgets()
を使用できます 文字列の行を読み取る関数。そして、 puts()
を使用できます 文字列を表示します。
例 2:fgets() と puts()
#include <stdio.h>
int main()
{
char name[30];
printf("Enter name: ");
fgets(name, sizeof(name), stdin); // read string
printf("Name: ");
puts(name); // display string
return 0;
}
出力
Enter name: Tom Hanks Name: Tom Hanks
ここでは、fgets()
を使用しています。 ユーザーから文字列を読み取る関数。
fgets(name, sizeof(name), stdlin); // read string
sizeof(name)
結果は 30 になります。したがって、name のサイズである入力として最大 30 文字を受け取ることができます。 文字列。
文字列を出力するために、 puts(name);
を使用しました .
注: gets()
関数は、ユーザーからの入力を取得することもできます。ただし、C 標準からは削除されています。
gets()
だからです 任意の長さの文字を入力できます。したがって、バッファ オーバーフローが発生する可能性があります。
関数に文字列を渡す
文字列は、配列と同様の方法で関数に渡すことができます。配列を関数に渡す方法について詳しくは、こちらをご覧ください。
例 3:文字列を関数に渡す
#include <stdio.h>
void displayString(char str[]);
int main()
{
char str[50];
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
displayString(str); // Passing string to a function.
return 0;
}
void displayString(char str[])
{
printf("String Output: ");
puts(str);
}
文字列とポインタ
配列と同様に、文字列名はポインターに「分解」されます。したがって、ポインタを使用して文字列の要素を操作できます。この例を確認する前に、C 配列とポインターを確認することをお勧めします。
例 4:文字列とポインタ
#include <stdio.h>
int main(void) {
char name[] = "Harry Potter";
printf("%c", *name); // Output: H
printf("%c", *(name+1)); // Output: a
printf("%c", *(name+7)); // Output: o
char *namePtr;
namePtr = name;
printf("%c", *namePtr); // Output: H
printf("%c", *(namePtr+1)); // Output: a
printf("%c", *(namePtr+7)); // Output: o
}
よく使われる文字列関数
- strlen() - 文字列の長さを計算します
- strcpy() - 文字列を別の文字列にコピー
- strcmp() - 2 つの文字列を比較します
- strcat() - 2 つの文字列を連結します
C言語