ページ 11

strcpy_s 例外のスロー

Posted: 2017年9月28日(木) 11:47
by あらい16
strcpy_sの動作を確認しようと思い、以下のソースを組んでコンパイルしたのですが、見事にstrcpy_sの部分で「ブレークポイントが発生しました。」と出て動作が停止してしまいます。
どうか知恵を貸していただけると幸いです。
自分としては、入力された文字を名前として取得し、名前、HP、MPを出力する、といった動作を行って呉れる予定でした。

while.h

コード:

#pragma once

int loop_flag();
while.cpp

コード:

#include <DxLib.h>
#include "while.h"

int loop_flag() {
	if (CheckHitKey(KEY_INPUT_ESCAPE) != 0) return 0;
	return 1;
}
myState.h

コード:

#pragma once

class superstate {
private:
	char name[128];
	int HP;
	int MP;

public:
	void setState(char*, int, int);
	void Draw();
};
myState.cpp

コード:

#include <DxLib.h>
#include "myState.h"
#include <String>

void superstate::setState(char* myName, int myHp, int myMp) {
	strcpy_s(name, sizeof(name), myName);
	HP = myHp;
	MP = myMp;

}

void superstate::Draw() {
	DrawFormatString(200, 200, GetColor(255, 255, 255), "your name:%s\nHP:%d\nMP:%d", name, HP, MP);
}
main.cpp

コード:

#include <DxLib.h>
#include "while.h"
#include "myState.h"


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
	ChangeWindowMode(TRUE); // ウィンドウモード
	if (DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK) != 0) return -1;//初期化と裏画面化
	SetMouseDispFlag(TRUE);

	superstate tanaka;
	char* N = NULL;

	KeyInputString(50, 50, 128, N, false);
	tanaka.setState(N, 10, 5000);
	tanaka.Draw();
	while (loop_flag());

	DxLib_End(); // DXライブラリの終了
	return 0;
}

Re: strcpy_s 例外のスロー

Posted: 2017年9月28日(木) 22:54
by みけCAT
KeyInputStringの時点で落ちないのが不思議ですが、NULLから文字列をコピーしようとしているのがダメでしょう。
コピー元には有効なバッファへのポインタを指定しないといけません。

Re: strcpy_s 例外のスロー

Posted: 2017年9月29日(金) 11:34
by あらい16
返信ありがとうございます。

メイン文の*NをN[128]にして、myState.hのnameもname[128]にした所思い通りに動いたのですが、これは正しい処理をしていますか?

Re: strcpy_s 例外のスロー

Posted: 2017年9月29日(金) 21:57
by みけCAT
あらい16 さんが書きました:myState.hのnameもname[128]にした

コード:

	char name[128];

コード:

	char name[128][128];
にしたということですか?
そうだとすると、char*を渡すべきstrcpy_sの第一引数にchar(*)[128]を渡すことになるので、間違っています。

Re: strcpy_s 例外のスロー

Posted: 2017年9月29日(金) 22:33
by あらい16
あ、すいません勘違いだったようで、myState.hのほうはいじってませんでした。
確認不足でした、申し訳ありません。

Re: strcpy_s 例外のスロー

Posted: 2017年9月29日(金) 22:44
by みけCAT
Nの後の = NULLを外しているのであれば、大丈夫だと思います。

Re: strcpy_s 例外のスロー

Posted: 2017年9月29日(金) 23:34
by あらい16
ああ、良かったです
長々とお付き合い下さってありがとうございます