У меня есть следующее:
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 перед дорогой?
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
.
strcpy_s
смысл семантически, но асимметричен с последовательностью операций, частью которой он является.
Спасибо всем, кажется, проблема решена.
[...]
char buffer[MAX_PATH] = {};
[...]
char c_buffer[MAX_PATH*2] ;
strcpy_s(c_buffer, buffer);
strcat_s(c_buffer, confchar);
[...]
Строка, показанная в таблице, теперь как и должно быть.