C 言語の文字列を使用する場合の注意事項

文字列入力の問題

文字列入力関数:

  1. scanf("%s", str) は、空格、回车、制表符或EOF区切り文字、スペース、復帰文字、タブ、または EOF は読み取られない文字列を読み取ります。区切り文字以降の文字は次のエントリとして処理されます。
  2. gets(str) は、区切り文字、復帰文字、または EOF が読み取られない回车或EOFと考えて、文字行を読み取ります。

赋值语句assign one字符串常量または字符数组直接 assign to one を使用することはできません字符数组文字配列名はアドレス定数であり、数値配列名を割り当てることができないのと同様に、その値を変更することはできません。次の行は両方とも不正です。

str1 = "China";
str2 = str1;

1 つのまたはに割り当てる赋值语句ことができるのは 1 つだけですしたがって、これを簡単に実現する方法は、文字列を別の文字配列に使用することです。字符字符型变量字符数组元素strcpy函数复制

文字列コピー関数: strcpy(str1, str2) は、文字列 str2 を文字配列 str1 ('\0' を含む) にコピーします。文字列 str2 の位置を 1 にすることもできます字符串常量str2有效字符桁 <= str1 の場合、部分的または完全になります覆盖str2 の有効な文字数が str1 より大きい場合、エラーが報告されます。

文字列指定ビットコピー関数: strncpy(str1, str2, n) は、文字列 str2 内の文字を、str1 内の元の文字である前面n个文字配列 str1 にコピーします取代最前面n个


文字列の長さの問題

文字配列を初期化する場合、中括号それを記述する方法は 2 つあります数字

  1. 角括弧
    A の中に数字を書きます。数字は実際のサイズと同じです。システムでは不会在后面加'\0'、文字数は配列のサイズと同じであり、数字と同じです。
     char str[6] = "abc123";
     char str[6] = {
          
          "abc123"};
     char str[6] = {
          
          'a', 'b', 'c', '1', '2', '3'};
    
    B. 数値と実際のサイズが等しくない: システムは、未初始化元素置'\0'文字数が数値に等しくなく、配列のサイズが数値に等しいと応答します。
    char str[8] = "abc123";                       //"abc123\0\0"
    char str[8] = {
          
          "abc123"};                     //{"abc123\0\0"}
    char str[8] = {
          
          'a', 'b', 'c', '1', '2', '3'}; //{'a','b','c','1','2','3','\0','\0'}
    
  2. 角括弧内に数値を書き込まないでください。システムは以下の最初の 2 つのケースに応答し自动在末尾加'\0'、配列のサイズは文字数と同じになります加一3 番目のケースでは不同、配列の長さは文字数と同じです。
    char str[] = "abc123";       //"abc123\0"
    char str[] = {
          
           "abc123" };   //{"abc123\0"}
    
    char str[] = {
          
           'a', 'b', 'c', '1', '2', '3' };
    //故采用该方法定义时,我们一般手动加上'\0',如下:
    //char str[] = { 'a', 'b', 'c', '1', '2', '3', '\0' };
    

私たちが一般的に考える文字列の長さは、文字配列内の有効な文字の数を指すため、「\0」は含まれません。
したがって、としてsizeof()計算を使用することはできませんので、通常は を使用します文字列を渡すことによって文字列の終了位置を決定し計算された文字列を返します字符数组长度字符串长度strlen()函数strlen()函数'\0'有效字符个数字符串长度


その他の文字列関数

文字列結合関数: strcat(str1, str2) は、
文字列 str2 を拼接文字列 str1 后面( 包括'\0') に変換し、結果を str1 文字配列に入れるため、str1 配列のサイズは要件を満たしている必要があります。関数呼び出し後、返回值str1 文字配列が取得されます地址

文字列比較関数: strcmp(str1, str2) は
str1 と str2に使用されます比较。比較ルールは、2 つの文字列が出現するまで、または出現するまで値自左至右によって 1 つずつ比較することです実際、この関数を使用するときは、結果が同じである場合、2 つの文字列は等しいとみなされます。代わりに、誰が誰より大きいかは気にされず、文字列のサイズは無意味です。ASCII码不同的字符'\0'相等全部字符

  1. 2 つの文字列が同じ場合は 0 を返します。
  2. str1>str2 の場合、正の整数を返します。
  3. str1<str2 の場合、負の整数を返します。

文字列の大文字小文字変換関数

  1. strlwr():文字列内の大写文字を小写文字に変換します。
  2. strupr():文字列内の小写文字を大写文字に変換します。

おすすめ

転載: blog.csdn.net/jiang1126/article/details/125313912