初めて投稿するので、混乱させて申し訳ありません:
私はこのような関数を書いています:
int myFunc(char* inputStr, int *argCTemp, char** argVTemp[]);
私の関数の目的は、入力文字列 (基本的には任意のユーザー入力) のコピーを取得し、それを使用strtok
してトークンに変換し、配列ポインター ( ) を介して配列に入力することargV
です。が終了したらmyFunc
、うまくいけば、文字列から引数の数と文字列の配列が得られinputStr
ます。
これが私がそれを呼び出す方法の例です:
int main(int argc, char** argv[])
{
int argCTemp = -1;
char** argVTemp;
// 1 Do Stuff
// 2 Get input string from user
// 3 then call myfunc like this:
myFunc(inputStr, &argCTemp, &argVTemp);
// 4: I get garbage whenever I try to use "argVTemp[i]"
}
私の質問: 安全で一貫した方法でこれを行うにはどうすればよいですか? プロはこれをどのように行うのですか?
malloc
次の理由で使用しません。- 入力の引数の数またはそれぞれの長さがわかりません(スペースを動的に割り当てるため)。それが私がポインターを使用する理由だと思いました
- メイン関数で宣言しているので、スタック上にある場合でも、使用される/メモリへのポインタは問題なく/スコープ内に留まる
argCTemp
と思いました。argVTemp
myFunc
終了すると、作成されたスタック参照が無効になることがわかっているため、呼び出し元の関数からポインターを送信しました。ポインターなどを使用する必要がありますmalloc
か?最後に: 終了する前に、 and
myfunc
の値を確認し、有効な内容を持っていることを確認します。私は次のように設定しています:argCTemp
argVTemp
argCtemp
argVtemp
(*argCTemp) = argCount; (*argVTemp)[0] = "foo";
関数が終了する前に問題なく動作しているようです。メモリ内の別の場所にポインターを設定しているため、参照が失敗する理由がわかりません。malloc
ポインターを設定するときにINSIDEを使用してみましたが、終了して呼び出し元の関数によって読み取られると、myFunc
まだゴミになります。myFunc