1

私の質問は簡単です:

あなたがこれを持っているとしましょう:

char *chrptr = "junk";

*chrptr当時を想像してみてくださいj。現在の文字を次の文字にインクリメントする方法はありますか?jこの場合はそうなりkますか?次の文字に移動したくないので、現在のポイントの文字をインクリメントしたい。

私はCを初めて使用しますが、試したこと(*chrptr)++は機能しません。

4

4 に答える 4

3

編集に基づいて、文字列を変更したいようです。定数文字列ではできませんが、実際にはできますが、その動作は未定義です。したがって、定義を非定数文字配列に変更する必要があります。

//This initializes a 5 element array including the null byte at the end
char chrptr[] = "junk";
//now you can modify that
chrptr[0]++;
//or equivalently 
chrptr[0] +=1;
chrptr[0] = chrptr[0]+1;
于 2012-10-23T05:49:20.943 に答える
2
char *chrptr = "junk";

このコードは本当に良くありません。「ジャンク」のような文字列リテラルは、読み取り専用メモリへのポインタです。それらを変更することは想定されていません。だからどちらか言う:

const char* chrptr = "junk"; // pointer to a const; no modifications

または(あなたの場合):

char chrArray[] = "junk";

これにより、スタック上に5要素の文字配列が作成され、「ジャンク」(およびヌルターミネータ)で初期化されます。これで、自由に変更できます。

chrArray[0] ++;
(*chrArray) ++;

(残りの発言)

私はcを初めて使用しますが、(* chrptr)++などは機能しません。

それら機能しますが、異なります。これを要約しましょう:

  • chrptrタイプpointer-to-charの値です。
  • *chrptrポインタが逆参照されているため、はchar型の値です。

これらは両方とも「l値」(=実際のオブジェクト)であるため、次のように変更できます。

  • ++ chrptrポインタを1つインクリメントします(=ポインタを1オブジェクト進めます)
  • ++ *chrptr文字を1つ増やします(=に変わります'a''b'

(以前は++*chrptr、文字列がメモリの読み取り専用セクションにあったため、機能しませんでした。notを使用して文字列を指定した場合const char*char*予期しない実行時の動作ではなく、有用なコンパイルエラーが発生します。)


また注意してください:

単純なステートメントの場合、はと++*chrptr;同等(*chrptr)++;です。演算子の順序は重要です(逆参照してからインクリメントします)。

OTOHは、演算子の優先順位*chrptr++のため、インクリメントしてから逆参照します。優先順位がわからない場合は、括弧を追加してください。

于 2012-10-23T05:55:09.230 に答える
1

逆参照演算子を使用してポインターを再度逆参照する必要はありません*

chrptr++メモリ内の文字ポインタを進めるだけです。

アップデート

while文字を検索するためにループをラップすることができます。

char *chrptr = "junk";
char search = 'k';

while (*chrptr) {
  if (*chrptr == search)
    printf("%c\n", *chrptr);
  chtptr++;
}
于 2012-10-23T05:49:20.193 に答える
1

これを参照してください (*chrptr)++; 正常に動作しますが、これにより、chrptr が指す配列の最初の文字がインクリメントされます。あなたの場合、次のようなステートメントを使用しています

char *chrptr = "がらくた";

ここで、chrptr は const char 配列を指しているため、(*chrptr)++ を使用しています。文字列の変更を反映せずに増加します。

しかし、このようにコードを使用すると (http://codepad.org/FJMB1ryv) :--

#include<iostream>

using namespace std;

int main()
{
char a[]="yogendra";
char *y=a;//(char*)"junk";
(*y)++;
cout<<y<<endl;
return 0;
}

あなた (*y)++ は動作します。これが役に立てば幸いです。幸運を:)

于 2012-10-23T06:10:22.830 に答える