0

const char配列をメモリ内のどこかにコピーして、それを指そうとしています。

メイン prog の下でこの var を定義しているとしましょう:

char *p = NULL;

そしてそれを文字列で関数に送信します:

myFunc(&p, "Hello");

今、私はこの関数の最後にポインターが文字 H を指すようにしたいのですが、 puts() すると、 Hello が出力されます。

これが私がやろうとしたことです:

void myFunc(char** ptr , const char strng[] ) {
    *ptr=(char *) malloc(sizeof(strng));    
    char * tmp=*ptr;
    int i=0;
    while (1) {
        *ptr[i]=strng[i];
        if (strng[i]=='\0') break;
        i++;
    }
    *ptr=tmp;
}

私は今それがごみであることを知っていますが、それを正しく行う方法を理解したいと思います.

また、(&ptr のように)referenec によって ptr 引数を作成しようとしましたが、左辺値と右辺値の問題により成功しませんでした。

私にとって変更可能なのは関数だけです。文字列ではなく文字を使用したいと思います。

事前に助けてくれてありがとう。

4

3 に答える 3

3

char*すべてをに置き換えるだけstd::stringです。既存のユーティリティを使用しないという非常に具体的な理由がわかるまで、これを行います。これは、初心者にはありません。上記のコードはいずれも、生のポインターを必要としmalloc()ないか、または生のポインターを必要としません。

その他の注意事項:

  • const char strng[]as パラメータは と同じconst char* strngです。配列構文では配列にはならず、ポインターのままです。この混乱を避けるために、この構文は使用しません。
  • static_castまたは C スタイルのような他の C++ キャストのいずれかを使用し(char*)malloc(..)ます。その理由は、より安全だからです。
  • の戻り値を確認するとmalloc()、null が返される場合があります。また、最終的に呼び出す必要がありますfree()。そうしないと、アプリケーションでメモリ リークが発生します。

最後に、ポインタは文字列の最初の要素である「H」を指しています。*pこれを見る代わりに出力pします。

于 2013-06-29T07:15:42.050 に答える
0

必要なコードはこれだけです...これ以上はありません...

void myFunc(char **pp, char * str){
*pp = str;

}

ここでの唯一の問題は、「Hello」は定数文字列であるため、読み取り専用セクションに存在することです...そのため、「Hello」を別のものに変更することはできません...

于 2013-06-29T10:47:19.733 に答える