私がやりたいことは、引用の終わりまで引用を繰り返すことです/(*引用には何も含まれていません)。私のコードは有効ですか?
char *quote = "To be or not to be, that is the question.";
for (quote = 0; *quote != NULL; quote++){
*quote = tolower(*quote);
}
配列をトラバースするには、おそらく別のポインターが必要です。そうしないと、元の文字列へのアクセスが失われます。
そしてできれNULL
ばポインターにのみ使用してください。
代わりにインデックスを使用する場合を除き、初期値として使用しない0
でください (以下を参照)。
文字列をコピーするのではなく、読み取り専用のリテラルchar *quote =
をquote
指すだけです。char quote[] =
代わりに使用してください。
char quote[] = "To be or not to be, that is the question.";
char *quotePtr;
for (quotePtr = quote; *quotePtr != '\0'; quotePtr++){
*quotePtr = tolower(*quotePtr);
}
テスト。
インデックスの使用:
char quote[] = "To be or not to be, that is the question.";
int i;
for (i = 0; quote[i] != '\0'; i++){
quote[i] = tolower(quote[i]);
}
テスト。
イニシャライザで再割り当てquote
していfor
ますが、これは無効であり、パーツで逆参照しているため、アクセス違反が発生します*quote != NULL
。
意味的にはNULL
と'\0'
は同等ですが、構文的にはこちらの方が好みです。このアプローチを使用すると、文字列 (の先頭) へのポインターを保持することに注意してください。
wchar const_t* quote = L"To be or not to be, that is the question.";
for( wchar_t* c = quote; *c != '\0'; c++ ) {
*c = tolower( *c );
}
代わりにインデックスを使用します。
wchar const_t quote[] = L"To be or not to be, that is the question.";
for( size_t i = 0; i < sizeof(quote); i++ ) {
quote[i] = tolower( quote[i] );
}
(コンパイル時にsizeof
の値が不明な場合、 のセマンティクスが変わることに注意してください)quote