2016-07-07 8 views
-1

上のポインタへのポインタを初期化し、私はstrtolはを使用していると私はする必要がありいくつかの戻り値のいずれかを保持するために** charを渡しますが、ヒープスペースを割り当てることはやりすぎです。私はこのために、スタック上のスペースを得るための、見つけることができますクリーン正しい(私は願っています)の方法は、次のとおりです。が...私の場合は</p> <p>を私はCの初心者だし、私は右のポインタ/メモリの事をやろうとしているスタック

char *_ = NULL; 
char **endptr = &_; 
ret = strtol("not a number", endptr, 0); 

私は好奇心が強い、この効果を得るために、より簡潔または慣用的な方法はありますか?私は...

EDIT使用することは決してありません汚れ命名物事を感じる:明確にする を、私はちょうど_

+2

'_'は、多くの場合、変数名に疑問のある選択肢があると考えられます。 –

+0

十分です。多くの関数型言語では、使用しない値に対してパターンマッチングを行う従来の方法です。このようなことのためのCのコンベンションはありますか? – Shane

+1

'char * endptr;' 'strtol(str、&endptr、0);'。つまり、 'endptr'をポインタとして宣言し、そのポインタのアドレスを' strtol'に渡します。 – user3386109

答えて

3

strtolが2番目の引数としてNULLを受け入れない、endptrをを使用する予定でください。それはあなたがこのようなコードの1行を避けることができ、NULLを受け入れなかった場合は

ret = strtol("not a number", NULL, 0); 

char *unused; 
ret = strtol("not a number", &unused, 0); 
+0

初期化が不足しているにもかかわらず、*未使用のスペースは常にスタックにあり、&unusedは有効なスタックアドレスになります。 – Shane

+0

@Shaneいいえ、 'unused'はスタック上にあり、' unusued'のpointeeが設定されていないため '* unused'は未定義です。比較する: 'int x; printf( "%p"、&x); 'xが初期化されていなくても' x 'のアドレスを表示する) –

+0

'0の結果の有無を調べるには' endptr'を使う必要があることに注意してください'は、入力が数字でないか、または入力が実際に' 0 'であることに起因する –

0

をあなたドンので、もしあなたがこのようなコードを書くことができますhttp://www.cplusplus.com/reference/cstdlib/strtol/

を参照してください。 endptrが必要です。あなたはstrtolにヌルポインタを渡すことができます。さもなければ、私はあなたが使用しない変数の命名について心配しないでしょう。あなたが持っているように私はそれを_と名付けるとは思わないが。

関連する問題