【解決方法】C の IF ステートメント内で配列変数が機能しないのはなぜですか?

プログラミングQA


VSコードを使ってCプログラムを書き、C言語のIf文内の配列に文字列を代入してみました。 しかし、うまくいきません。 ただし、正常に割り当てられるのは整数変数のみです。 何故ですか?

コードは次のとおりです。

C
#include <stdio.h>

int main ()
{
    char NumberType[] = "POSITIVE";
    int Number;
    printf("Enter a number: ");
    scanf ("%d", &Number);
    if (Number <0)
    {
        NumberType[10] = "NEGATIVE";
    }

    if (Number == 0)
    {
        Number = 4;
    }

    Number = (Number/2);
    printf("The number divided by 2 is %d and it's a %s number", Number, NumberType);
    return 0;
}

私が試したこと:

文字列「NEGATIVE」を配列に割り当てることはできません NumberType[10] 最初の if ステートメントが入力されたときは、整数 ‘4’ が ‘Number’ 変数に割り当てられますが、2 番目の if ステートメントが入力されたときは、’Number’ 変数に代入されます。

解決策 1

引用:
C
NumberType[10] = "NEGATIVE";

の配列を保存しようとします chars 要素内 10 の 8 要素配列の char 価値観。 それはうまくいきません。

c – c – 文字の配列に文字列を割り当てる[^]

どうやら、C ではある配列を別の配列に割り当てることはできないようです。 NumberType = "NEGATIVE"; 機能しません。 を使用する必要があります strcpy その代わり。

C
strcpy(NumberType, "NEGATIVE");

解決策 2

リチャードの発言に付け加えると、このコードは決して機能しません。

    char NumberType[] = "POSITIVE";
...
        NumberType[10] = "NEGATIVE";

NumberType は文字の配列であり、「NEGATIVE」も同様であるためです (C には文字列の概念がないため、文字列リテラルは文字の配列として格納されます)。 適合しない文字配列内の 1 つの文字位置に 9 文字を割り当てようとしています (C 文字列はヌルで終了しており、最後に処理を停止するタイミングをシステムに指示する「隠し文字」があることを意味します)。

実際、それはさらに悪いことです。代入ではポインタ値を書き込もうとするため (配列は実際には配列に含まれるデータへのポインタであるため)、システム内のポインタのサイズによっては非常に混乱してしまうことを意味します。

私がお勧めするのは、それが位置であるか負であるかを示すフラグを使用することです (int は問題ありません。C では 0 は FALSE、ゼロ以外は TRUE)。 そこで私ならこうします:

C
#define TRUE 1
#define FALSE 0
#define POSITIVE TRUE
#define NEGATIVE FALSE
...
int NumberType = POSITIVE;
...
if (...)
   {
   NumberType = NEGATVE;
   }
...
printf("The number divided by 2 is %d and it's a %s number", Number, NumberType ? "POSITIVE" : "NEGATIVE");

これで、コードがより読みやすくなり、操作が容易になりました。

コメント

タイトルとURLをコピーしました