powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Каково отличие в работе флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE?
4 сообщений из 4, страница 1 из 1
Каково отличие в работе флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE?
    #39091197
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

WinAPI; C++; StrSafe.h

Для функции StringCchCopyEx определены флаги STRSAFE_NULL_ON_FAILURE и STRSAFE_NO_TRUNCATION . Читаю MSDN и не могу понять, в чём их разница.

MSDN STRSAFE_NULL_ON_FAILURE

If the function fails, pszDest is set to an empty string ( TEXT("") ). In the case of a STRSAFE_E_INSUFFICIENT_BUFFER failure, any truncated string is overwritten.

STRSAFE_NO_TRUNCATION

As in the case of STRSAFE_NULL_ON_FAILURE , if the function fails, pszDest is set to an empty string ( TEXT("") ). In the case of a STRSAFE_E_INSUFFICIENT_BUFFER failure, any truncated string is overwritten.

Экспериментальным путём обнаружить отличия так же не удалось:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
LPCTSTR pSrc = L"ASDFGHJK";

size_t charsCount = 5;
size_t buffer_size = charsCount * sizeof(TCHAR);
TCHAR *buffer = (TCHAR *) malloc(buffer_size);
ZeroMemory(buffer, buffer_size);    

// Now I generate the STRSAFE_E_INSUFFICIENT_BUFFER result...

LPTSTR pDestEnd = NULL;
size_t remaind = 0;

// The MEMORY content after the StringCchCopyEx executing:
// 00 00 53 00 44 00 46 00 00 00 fd fd fd fd ab ab ab ab ab
// DWORD dwFlags = STRSAFE_FILL_BYTE('X') | STRSAFE_NO_TRUNCATION;

// The MEMORY content after the StringCchCopyEx executing:
// 00 00 53 00 44 00 46 00 00 00 fd fd fd fd ab ab ab ab ab
DWORD dwFlags = STRSAFE_FILL_BYTE('X') | STRSAFE_NULL_ON_FAILURE;

HRESULT result = StringCchCopyEx(buffer, charsCount, pSrc, &pDestEnd, &remaind, dwFlags);



В комментариях показано, для результата STRSAFE_E_INSUFFICIENT_BUFFER результат применения флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE идентичен (во всяком случае если судить по содержимому памяти в динамически выделенном буфере).

Каково отличие в работе обозначенных флагов?
...
Рейтинг: 0 / 0
Каково отличие в работе флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE?
    #39091229
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumДоброго времени суток.

WinAPI; C++; StrSafe.h

Для функции StringCchCopyEx определены флаги STRSAFE_NULL_ON_FAILURE и STRSAFE_NO_TRUNCATION . Читаю MSDN и не могу понять, в чём их разница.


Одно могу сказать определённо: это не Win API
...
Рейтинг: 0 / 0
Каково отличие в работе флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE?
    #39091230
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumКаково отличие в работе обозначенных флагов?

А ты не допускаешь мысли, что это просто синонимы могут быть ?
...
Рейтинг: 0 / 0
Каково отличие в работе флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE?
    #39091247
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА ты не допускаешь мысли, что это просто синонимы могут быть ?
Я допускаю мысль, что существуют ситуации, когда эти флаги дают разные результаты.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Каково отличие в работе флагов STRSAFE_NO_TRUNCATION и STRSAFE_NULL_ON_FAILURE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]