Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - swprintf (Linux) - неправильная работа

Ответить
Настройки темы
C/C++ - swprintf (Linux) - неправильная работа

Новый участник


Сообщения: 29
Благодарности: 3

Профиль | Отправить PM | Цитировать


Добрый день
Не могу добиться правильной работы swprintf под Linux

Код: Выделить весь код
#include <stdio.h>
#include <wchar.h>
#include <string.h>

int main() {
    FILE *fileOut;
    wchar_t wcBuffer[264];
    char *cBuffer = "string";

    printf("\n\tTest module (swprinf)\n");

    if ((fileOut = fopen("testfile.txt", "wb")) == NULL) {
        printf("\tCan't open file \"testfile.txt\"");
        return -1;
    }

// Case 1
    memset(wcBuffer, 0x00, sizeof(wcBuffer));
#ifdef __linux
    swprintf(wcBuffer, 260, L"Test_string_1");
#else
    swprintf(wcBuffer, L"Test_string_1");
#endif
    fwrite(wcBuffer, sizeof(wcBuffer), 1, fileOut);

// Case 2
    memset(wcBuffer, 0x00, sizeof(wcBuffer));
#ifdef __linux
    swprintf(wcBuffer, 260, L"Test_%S_2", cBuffer);
#else
    swprintf(wcBuffer, L"Test_%S_2", cBuffer);
#endif
    fwrite(wcBuffer, sizeof(wcBuffer), 1, fileOut);

    fclose(fileOut);

    return 0;
}
При компиляции под Windows все работает, как ожидается; под Linux возникает 2 проблемы:
1. Case 2. Вместо Test_string_2 в файле оказывается записан шаблон Test_%S_2
2. Case 1+2. После строки в файле оказывается "мусор" (под Windows идут аккуратные 0х00, как задумывалось)

В чем моя ошибка?
Спасибо

PS. Компиляторы:
Linux GCC 4.4.7 (3.x.x тоже испытывался), опции -Wall -fshort-wchar -O2 -m32 -s -U__STRICT_ANSI__
Windows MinGW

Отправлено: 14:45, 28-05-2014

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Вот оно что! во всём виноват
Код: Выделить весь код
 -fshort-wchar
wxhar_t то стал короче, в реализация wsprintf короче не стала. Нужно слинковать с соответвтующей функцией glibc, но я такой не нашёл (для 16-битного wchar_t)
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:56, 30-05-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата pva:
wxhar_t то стал короче, в реализация wsprintf короче не стала. Нужно слинковать с соответвтующей функцией glibc, но я такой не нашёл (для 16-битного wchar_t) »
Да, действительно, это и есть root cause. Но мне-то нужен 16-битный wchar_t... Похоже, что придется делать "костыли", а не хотелось бы...

Последний раз редактировалось RedScorpio, 05-06-2014 в 13:15.


Отправлено: 10:36, 02-06-2014 | #12



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - swprintf (Linux) - неправильная работа

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Неправильная работа клавиатуры Asus K53S vadim1000 Ноутбуки 8 10-09-2014 12:16
[решено] Realtek ALC889 неправильная работа колонок 5.1 Третий Непонятные проблемы с Железом 1 16-12-2011 07:55
Службы - [решено] Неправильная работа центра обновлений Solovey1985 Microsoft Windows Vista 3 08-08-2010 18:38
[решено] Неправильная работа клавиатуры dnaop Лечение систем от вредоносных программ 15 14-02-2009 15:24
Linux. Работа с конслью AnGel_of_Death Общий по Linux 11 29-07-2006 16:43




 
Переход