0

この関数を使用して、文字列から改行文字を削除しています。

void remove_newline(char *string) {
    string[strcspn(string, "\r")] = "\0";
    string[strcspn(string, "\n")] = "\0";
}

興味深いことに、これをコンパイルしようとすると警告が表示されます。

警告: 割り当ては、キャストなしでポインターから整数を作成します

この状況でなぜこのような警告が表示されるのですか?

4

1 に答える 1

4

"\0"文字列リテラルで、 の文字配列を定義します{'\0', '\0'}。インデックスなしで使用すると、ポインターに減衰します。string[...]次に、このポインターは 8 ビット整数である aに割り当てようとしているcharため、警告が表示されます

割り当ては、キャストなしでポインターから整数を作成します

単一の文字、文字リテラルをコーディングするには、一重引用符を使用します。'\0'

于 2012-11-19T13:10:26.463 に答える