2012-01-31 7 views
0

私は暗証番号(PINの中のデータがあります)を一時的にコピーしようとしています。 (PINは常にtempより小さいと仮定します)文字列をコピーするときにこれは機能しますか?

また、ポインタをtempのように扱うと大丈夫でしょうか?

long int res = strtol (&temp, NULL, 10); 
+0

"*(PIN + i)"または "PIN [i]"のように、PIN + 1ポインタを間接参照する必要があります。 "strcpy(temp、PIN);"というCライブラリ関数を使う方が簡単です。 –

答えて

1

いくつかのこと、

TEMP =「\ 0」 ウィル、実際に文字列に2つの\ 0を入れ、引用によって暗黙あなたが書いた1、および1。

PIN +は、アドレススペースの最後にヌルポインタを保証できる場合を除いて、逆参照する必要があります(*付き)。

ポインタではなく文字をコピーするには、代入文も参照解除する必要があります。

temp[i]=*(PIN+i); 
i++; // Because the pointer needs to be incremented 

また、なぜstrcpyを使用しないのですか?またはstrncpy?

+0

strcpyは私がそれではないと思うより長い操作ですか? – Falcata

+0

今は良く見えますか?また、ありがとう! – Falcata

+0

デフなんて確かに (* src) { * dest = * src * srC++; * dest ++; } かなり痩せますが、NULLとソース文字列の終わりをチェックしません。さらに、コーディングのこの時点での操作の長さについては心配しません。最後まで最適化しておいてください:) – RussS

2

いいえ!

PIN+iは状態を変更しません。 PINiがゼロに等しくない間は、真となります。 PINはランダムなメモリアドレスなので、それは悪い考えです。

文字列をコピーする場合は、strcpyを参照してください。

+0

申し訳ありません、私は++を追加するのを忘れました!また、私はPINがヌルキャリッジ '\ 0'で終わっていると仮定しています。 – Falcata

+0

@Falcata PINがNUL文字で終わっている場合、 'strcpy(temp、PIN);'だけです。 – Borealid

関連する問題