コマンドライン引数から文字列をコピーすることになっているクラスを持つプログラムを作成しました。
これが問題のあるコードです。
void FileHandler::SetFile(const char*& filename)
{
for(unsigned tsr = 0; tsr < 200; tsr ++){
if(filename[tsr] == 0x0){
mFilename = new char[tsr];
strcpy(mFilename, filename);
mFilenameAllocated = true;
}
}
}
コマンド引数はNULLで終了していると想定しているため、このコードブロックは、文字列を新しいメモリスペースにmemcpyする前に、文字列の長さを見つけるためにNULL文字を探します。
私は何を見落としましたか?それとも、このコードは「正しく機能する」必要がありますか?
ありがとう
編集:
strcpyのせいですか?コマンド引数がNULLで終了していない場合、アクセス違反が発生するまで、メモリのセクションに沿って実行されますか?