私は次のことを試しました:*string = toupper(*string);
これは、文字列ポインタの最初の文字をポインタで大文字にしただけです。*pointer が指すすべての chars ポインターを大文字にしたい。とにかく私はこれを行うことができますか?
以下に示すように、これを行うことができます
char s[] = "hello world";
for ( char *p = s; *p; ++p ) *p = toupper( ( unsigned char )*p );
文字列リテラルは変更できないことに注意してください。文字列リテラルは不変です。例えば上記のコードで書くと
char *s = "hello world";
それ以外の
char s[] = "hello world";
その場合、プログラムの動作は未定義になります。
このようにすべての文字を反復処理する必要があります
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]);