###疑問
ポインタをインクリメントすると、インクリメントされたアドレス値はどこにいく(置かれる)のでしょうか?
下記のコードでは、アドレスをインクリメントしながら文字をコピーしています。
関数の外でアドレスを確認すると、文字列の先頭アドレスを指しますが、
関数内ではインクリメントされたアドレスを指しています。
インクリメントしたアドレスは戻さないといけないかなと思ったのですが、予想がはずれました。
また、これは参考書のコードですが、
関数の初めに新しいポインタ変数に代入することに意味あるのでしょうか?
当方では、そのままdestを使うこととの違いが分かりませんでした。
また、新しくメモリを確保するわけでなく、そのまま参照先を書き換えているので、戻り値として返す意味も分かりません。
定石の作法はあるのでしょうか。
また、このコードはバッファオーバーフローなど考慮されてないと思いますが
(strcpyなどもそうですよね?)、
基本的にC言語はパフォーマンス優先するから、例外処理をしないし、
実装者が仕様を理解した上で気をつけて使えという思想でしょうか?
###該当のソースコード
char* scpy(char* dest, const char* source){ char* p = dest; while((*p++ = *source++) != '\0'); printf("%d\n",p); return p; } printf("%d\n",s1); scpy(s1,s2); printf("%d\n",s1);
回答3件
あなたの回答
tips
プレビュー