Member 12330615 Ответов: 1

В чем главная ошибка этого кода?


В моем коде vc++ ,

Я хочу изменить имя ХХХ.000001.войдите в XXX.000002.журнал, ХХХ.000003.журнал.... применении CString.

struct idx_name{
    char type[4];
    char digit[6];
    char ext[4];
}

idx_name idx_logname;

	memset(&idx_logname, 0, sizeof(idx_logname));

        // get the char fname[100]; = "xxx.000001.log"
	memcpy(&idx_logname, fname, sizeof(idx_logname));

	CString s = CString(idx_logname.digit).GetBufferSetLength(6);
	int idx = _ttoi(s);
	idx++;

        ::ZeroMemory(&idx_logname.digit, sizeof(idx_logname.digit));
	sprintf_s(idx_logname.digit, sizeof(idx_logname.digit), "%06d", idx);
	::ZeroMemory(filename, sizeof(filename));
	memcpy(filename, &idx_logname, sizeof(idx_logname));

        // get Current_folder as current_directory
	CString folder = CString(Current_folder);
	s = folder + CString(filename);

Это не имеет ошибки компиляции.
Но во время выполнения процесс имеет запущенную ошибку в строке "sprintf_s", например

"Выражение: ("буфер слишком мал", 0);

Как новичок в VC++, пожалуйста, дайте мне знать об ошибке и кто знает простые способы изменения имен файлов?

Что я уже пробовал:

Один день потрачен впустую на эту проблему.

Richard MacCutchan

Один день потрачен впустую на эту проблему.
И вы будете продолжать тратить свое время на догадки вместо того, чтобы тратить некоторое время на изучение языка должным образом. Почти весь вышеприведенный код неверен и в лучшем случае приведет к неверным результатам, а в худшем-к сбою приложения.

1 Ответов

Рейтинг:
9

Patrice T

Цитата:
"Выражение: ("буфер слишком мал", 0);

Вы пытаетесь сохранить завершенную строку' / 0 ' размера 6 в буфере размера 6.
Завершенная строка' /0 ' размера 6 равна 6+1, то есть 7.
Просто для проверки попробуйте использовать больший буфер.


CPallini

5

Patrice T

Спасибо