6

私がやりたいことは、引用の終わりまで引用を繰り返すことです/(*引用には何も含まれていません)。私のコードは有効ですか?

char *quote = "To be or not to be, that is the question.";
for (quote = 0; *quote != NULL; quote++){
*quote = tolower(*quote);
}
4

3 に答える 3

13

配列をトラバースするには、おそらく別のポインターが必要です。そうしないと、元の文字列へのアクセスが失われます。

そしてできれ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]);
}

テスト

于 2013-09-24T23:12:21.453 に答える
0

イニシャライザで再割り当て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

于 2013-09-24T23:21:52.493 に答える