私はクラスの1つに対する宿題の質問に回答することになっています。具体的には、Cの特定の配列が文字列と見なされるかどうかを言うことになっています。この記事(https://www.geeksforgeeks.org/strings-in-c-2/)に基づいて、文字列は末尾にヌルターミネータが付いた文字の配列であることを知っています。
私の主なハングアップは、次のような配列について尋ねる質問の一部です。
char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' };
これは明らかに、末尾にヌル終了文字がある文字の配列です。ただし、途中にnullの終了文字があるため、文字列と見なされますか?それは文字列にどのように影響しますか?
編集:コメントに基づいて、私は質問の実際の表現を提供しました:
「次の配列のうち、strcpy()、strncpy()、strcmp()、strncmp()、および同様の文字列関数(すべての適用を示す)への引数として使用するために、「文字列」と見なすことができるのはどれですか? "
編集:質問が曖昧に書かれているようだったので(数人が指摘したように)、それについて教授にメールを送りました。誰かが気になるなら、彼は私に「はい、それは文字列です。重要なのはnull文字があることです。しかし、もちろんそれはすべての文字列操作に影響します。文字列はnull文字で終わります。」
strcmp()
。文字列関数の変更の引数として使用できるかどうかは、提供されていない追加の要因によって異なります。
c1
は変更可能であるためstrcpy
、ソース文字列を収容するのに十分な大きさでなかった場合を除いて、それが有効な宛先引数などにならない理由はわかりません。それは文字列ではなく、特定の目的に適したものではありません。
c1
は、すべての標準ライブラリの(狭い)文字列関数の文字列引数の基本的な要件を満たします(特に名前が付けられたものをすべて含みます)が、呼び出し側が期待または望んでいる動作とは異なる場合があります(引き出される可能性のある未定義の動作を無視する場合でも)。
char
。任意の文字タイプで十分です。
"CS"
数バイトのガベージが追加された文字列であると言うかもしれません(この場合、最後の NUL文字は無関係です)。しかし、それは「全体として」の文字列ではありません。-それでも、これをstrcpy
etc に供給しても、これらの関数は"CS"
パーツのみを「見る」ため、PCが爆発することはありません。