ページ 11

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さんへ
エラーになるんですか?
どうしてだっけ?