strcat_s добавляет странные символы

0

У меня есть следующее:

char confchar[MAX_PATH] = "\\dbstrings.cfg";
char buffer[MAX_PATH];
GetModuleFileNameA( NULL, buffer, MAX_PATH );
path_strip_filename(buffer);

Здесь я получаю путь к фактическому рабочему приложению. Это работает до сих пор. Я получу

c:\users\xxx\documents\visual studio 2008\projects\secdb\debug\

Я использую strcat_s для их объединения:

char c_buffer[MAX_PATH*2] ;
strcat_s(c_buffer, buffer);
strcat_s(c_buffer, confchar);

Строка сделана совместимой для использования для макета:

System::String^ c_bufstr = gcnew String(c_buffer);
this->lbl_stat->Text = lbltxt;

теперь я получаю что-то вроде:

@1vc:\users\xxx\documents\visual studio 2008\projects\secdb\debug\dbstrings.cfg

Я также испортил этот MAX_PATH, заменив его целыми числами и так далее. Результат тот же. Итак, что я могу сделать, чтобы удалить это @1v перед дорогой?

  • 4
    'char buffer [SomeSize] = {}', чтобы получить нулевую инициализацию
Теги:
visual-c++
visual-studio-2008

2 ответа

7
char c_buffer[MAX_PATH*2] ;
strcat_s(c_buffer, buffer); // <-- problem!
strcat_s(c_buffer, confchar);

c_buffer не инициализирован, поэтому вам нужно либо установить свой первый элемент в 0 перед вызовом strcat_s, либо использовать strcpy_s вместо первого вызова strcat_s.

  • 1
    ... strcpy_s смысл семантически, но асимметричен с последовательностью операций, частью которой он является.
1

Спасибо всем, кажется, проблема решена.

[...]
char buffer[MAX_PATH] = {};
[...]
char c_buffer[MAX_PATH*2] ;
strcpy_s(c_buffer, buffer);
strcat_s(c_buffer, confchar);
[...]

Строка, показанная в таблице, теперь как и должно быть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню