Запутанная проблема snprintf() без добавления 0C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Запутанная проблема snprintf() без добавления 0

Сообщение Гость »


Я столкнулся с запутанной проблемой, связанной с snprintf() при использовании qt5.6 с (mingw 5.3.0 32bit) в Win10.

Мой код выглядит следующим образом:

char *my3DesCBC_Decode_default(char *in_24char_CipherTxt, символ *out_32char_PlainTxt) { интервал xLen = 24; // по умолчанию: 24; интервал len001 = 0; беззнаковый символ *res_PlainTxt; беззнаковый символ *res_decode_Base64; base64_de((беззнаковый символ *)in_24char_CipherTxt, &res_decode_Base64, &xLen); если (des_decode(DES3_CBC, pmingKey16_default, pmingKeyLen_default, pmingVI008_default, res_decode_Base64, &res_PlainTxt, &xLen) == RESULT_OK) { xLen = xLen > 30? 30: ксЛен; // `xLen`: истинная длина расшифрованной строки snprintf(out_32char_PlainTxt, xLen + 0, "%s", res_PlainTxt); // проблема из этой строки len001 = strlen(out_32char_PlainTxt); printf("3DES CBC DECODE:%s ;Len=%d,%d\n", out_32char_PlainTxt, xLen, лен001); } } Строка snprintf(out_32char_PlainTxt, xLen + 0, "%s", res_PlainTxt); работает. Однако согласно документу, xLen + 0 здесь должно быть xLen + 1. Когда я использую xLen + 1, возникает ошибка, чтобы запустить его снова, мне нужно написать

snprintf(out_32char_CipherTxt,xLen+1,"%s",res_encode_Base64); \*(out_32char_CipherTxt + xLen) = '\0'; Более конкретно, xLen + 1 должно быть правильно, потому что нужен еще один бит для хранения eof '\0', который добавляется с помощью snprintf()< /код> автоматически. Интересно, почему мне приходится добавлять '\0' самому? Есть ли ловушка snprintf() на разных платформах?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»