Как объединить с помощью lstrcat в Visual C ++? - PullRequest
1 голос
/ 25 июня 2010

Я хотел бы добавить две строки вместе, чтобы я мог переименовать файл с помощью функции MoveFile. Но мои строки отказываются объединяться, поэтому вместо добавления «E: \» в «FILE-% s-% 02d% 02d% 02d-% 02d% 02d.txt», чтобы получить «E: \ FILE-% s-%» 02d% 02d% 02d-% 02d% 02d.txt ", это дает мне просто" E: \ ", как будто ничего не произошло.

Вот фрагмент моего полного кода:

  drivePathAgain = "E:\\";

  sprintf(newname, "FILE-%s-%02d%02d%02d-%02d%02d.txt",  szVolNameBuff, lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute);
  lstrcat((LPWSTR)drivePathAgain, (LPWSTR)newname);
  result = MoveFile((LPCWSTR) drivePath, (LPCWSTR) drivePathAgain );

Я не могу добавить новое имя в drivePathAgain. Если вам нужно, чтобы я опубликовал весь код, чтобы получить общую картину, я могу. Есть ли способ добавить такие строки?

Спасибо

Ответы [ 4 ]

3 голосов
/ 25 июня 2010

Это утверждение:

drivePathAgain = "E:\\";

предполагает, что drivePathAgain является указателем - вместо этого он должен быть массивом с большими размерами, инициализированным lstrcpy или подобным, так что есть пробел для того, что вы хотите от него отследить .

1 голос
/ 25 июня 2010

Исходя из вашего приведения к LPWSTR, я бы предположил, что ваш проект настроен в режиме Unicode. Это означает, что функции типа lstrcpy и MoveFile принимают указатели на строки wchar_t, а не char. Если вы не знаете, что это значит, вам нужно изучить разницу между Ascii и Unicode.

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

1 голос
/ 25 июня 2010

Чтобы использовать lstrcat, drivePathAgain должен быть достаточно большим, чтобы содержать обе строки;как вы поняли, он достаточно большой, чтобы вместить «E: \».

0 голосов
/ 25 июня 2010

Я действительно добавил этот путь до того, как разместил код:

char drivePathAgain[255]; 
lstrcpy((LPWSTR)drivePathAgain, (LPWSTR)drivePathTemp); 

with drivePathTemp = "E: \";Я потратил некоторое время, пытаясь отладить этот код безрезультатно.Объявление в моем исходном посте - это не то, что я использовал для объявления, а скорее, чтобы дать людям представление о том, на что похожа переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...