C言語でコードを書いています。
char a[]={p,r,a,d,e,e,p}
'0/'
最後に 追加して文字列にしたい。
または、最後に null を追加する以外に文字列にする方法はありますか?char *a=pradeep;
最後に null を追加して、これを文字列に変換します
配列のサイズを変更できないa
ため、null ターミネータを追加することはできません。宣言を次のように変更できます。
char a[] = "pradeep";
これにより、null ターミネータが暗黙的に追加されます。または:
char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', 0 };
しかし、文字列リテラルはより単純で明確です。すべてではないにしても、ほとんどの C 文字列ライブラリ関数では、null で終了する文字列が必要です。
char *a="pradeep";
文字列リテラルを作成し、末尾にヌル文字を追加します。
1 と同様の構文を使用して宣言したい場合は、次のようにすることができます。
char a[] = {'p','r','a','d','e','e','p', 0};
しかし、これを行う理由はありません。
編集コメントの質問について
受け取った文字から文字列を作成するn
場合は、次のようにします。
char *a = malloc(n*sizeof(char)+1);
常に 10 文字以下の場合は、次のように宣言できます。
char a[11];
次に、それぞれa[i]
に受け取った値を設定し、最後の値を で設定し0
ます。
sprintf を使用して連結を行うこともできますが、いずれにせよ、十分な場所が割り当てられていることを確認する必要があります。
あなたのコードは意味がなく、コンパイルできません。
文字列リテラルは、文字列リテラル構文を使用して記述するのが最適です。
const char *a = "pradeep";
これには、終了文字が含まれ、a
任意の文字列処理関数や出力などで使用できる C 文字列が示されます。
1). char a[]={'p','r','a','d','e','e','p','\0'};
有効な文字列を含む配列になりました。
2). char *a="pradeep";
This automatically appends null at end to make valid string.
'\0'
リテラル文字列を文字配列に代入すると、コンパイラは末尾に終端文字を含む正しい配列を自動的に作成します。
char a[] = "pradeep";
上記は書き込みと同じです
char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', '\0' };
また、配列を使用することをお勧めしますが、上記の最初の代替手段は次と同等です
char *pa = "pradeep";
ただし、この最後では、文字列の長さではなくポインターsizeof
のサイズを返すため、演算子を使用できなくなります。演算子に関するもう 1 つの注意点として、最初の 2 つの例では、文字列の長さではなく配列のサイズが返されます。つまり、文字配列の場合は終了文字が含まれます。sizeof
sizeof