strcpyについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

strcpyについて

#1

投稿記事 by dic » 16年前

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について

#2

投稿記事 by ねこ » 16年前

自分で思い付いて使ってるだけなので、危険かもしれないのですが。
デバッグ時に以下のようなマクロを組み込んでいます。
#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について

#3

投稿記事 by バグ » 16年前

そもそも、NULLポインタを引数としているのが駄目なのでは?
ですから、MSDNに書かれているように…

「第2引数はNULL終端文字列を指定するように」

すればいいだけだと思います。

dic

Re:strcpyについて

#4

投稿記事 by dic » 16年前

>ねこさん
なるほど単純にif文使えばいいですね
盲点でした

>バグさん
私の設計が悪いのか、第2引数に0が来る場合もあるんです
それで、どうやって回避しようかと考えてました

non

Re:strcpyについて

#5

投稿記事 by non » 16年前

dicさんへ
エラーになるんですか?
どうしてだっけ?

閉鎖

“C言語何でも質問掲示板” へ戻る