-1

私は次のことを試しました:*string = toupper(*string);

これは、文字列ポインタの最初の文字をポインタで大文字にしただけです。*pointer が指すすべての chars ポインターを大文字にしたい。とにかく私はこれを行うことができますか?

4

2 に答える 2

2

以下に示すように、これを行うことができます

char s[] = "hello world";

for ( char *p = s; *p; ++p ) *p = toupper( ( unsigned char )*p );

文字列リテラルは変更できないことに注意してください。文字列リテラルは不変です。例えば上記のコードで書くと

char *s = "hello world";

それ以外の

char s[] = "hello world";

その場合、プログラムの動作は未定義になります。

于 2016-01-25T23:13:52.937 に答える
1

このようにすべての文字を反復処理する必要があります

for (size_t i = 0 ; string[i] != '\0' ; ++i)
    string[i] = toupper((unsigned char) string[i]);

観察している動作は*、ポインターを逆参照しているためです。ポインターをインクリメントせずに逆参照しているため、一連の文字の最初の要素を設定しているだけです。

演算子は*、次の方法でポインターを操作し*(pointer + offset)ますpointer[offset]。と同等*string = toupper(*string)です

string[0] = toupper(string[0]);
于 2016-01-25T23:13:34.987 に答える