ページ 1 / 1
strcpyについて
Posted: 2009年6月24日(水) 16:46
by dic
strcpy について 第2引数はNULL終端文字列を指定するようにMSDNにかかれてますが
第2引数が0の場合、エラーが起きます
例を下に書きます
#include <stdio.h>
#include <string.h>
int main()
{
char *p = 0;
char buf[256];
strcpy( buf, p );
return -256;
}
この場合、確実にエラーになるのですが、どのようなエラーを避ける方法があるのでしょうか?
知恵を借りたいです
Re:strcpyについて
Posted: 2009年6月24日(水) 17:18
by ねこ
自分で思い付いて使ってるだけなので、危険かもしれないのですが。
デバッグ時に以下のようなマクロを組み込んでいます。
#define strcpy( A, B ) { \
if( A != NULL && B != NULL ) \
strcpy( A, B ); \
}
こうすると第一、第二引数にNULLが来た場合に処理しないようにできます。
実際に使う際にはelseの後で出力ウィンドウにエラー文章を出すような感じです。
DebugStrFunc.hというヘッダファイルによく使う関数を同じように定義して
下記のような記述を各cppから共通でインクルードするヘッダに記述しています。
#define USE_DEBUG_STR_FUNC // 任意にコメントアウト
#ifdef _DEBUG
#ifdef USE_DEBUG_STR_FUNC
#include "DebugStrFunc.h"
#endif
#endif
参考までに^^;
Re:strcpyについて
Posted: 2009年6月24日(水) 17:26
by バグ
そもそも、NULLポインタを引数としているのが駄目なのでは?
ですから、MSDNに書かれているように…
「第2引数はNULL終端文字列を指定するように」
すればいいだけだと思います。
Re:strcpyについて
Posted: 2009年6月24日(水) 19:02
by dic
>ねこさん
なるほど単純にif文使えばいいですね
盲点でした
>バグさん
私の設計が悪いのか、第2引数に0が来る場合もあるんです
それで、どうやって回避しようかと考えてました
Re:strcpyについて
Posted: 2009年6月24日(水) 22:03
by non
dicさんへ
エラーになるんですか?
どうしてだっけ?