Russian Qt Forum
Октябрь 01, 2024, 02:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: string to char[128]  (Прочитано 4843 раз)
Sacha
Гость
« : Ноябрь 06, 2009, 23:58 »

Подскажите пожалуйста как присвоить значение qstring char[128]?
Записан
Sacha
Гость
« Ответ #1 : Ноябрь 07, 2009, 00:06 »

Qt v4.2.2

string.toAscii().data();
пишет что не может присвоить char* to char[128]
« Последнее редактирование: Ноябрь 07, 2009, 00:08 от Sacha » Записан
MoPDoBoPoT
Гость
« Ответ #2 : Ноябрь 07, 2009, 00:45 »

string.toAscii().data();
пишет что не может присвоить char* to char[128]
Имя массива - это указатель, который "привязан" к области памяти (константный указатель) и его нельзя менять (по-моему так). Да и тем более здесь бы получилась утечка памяти (массиву память выделили, а потом про нее "забыли", поменяв значение указателя). Здесь надо скопировать данные в массив.
В общем, как-то так:
Код
C++ (Qt)
...
QString source;
...
int size = 128;
char str[size];
qstrncpy(str, source.toAscii().constData(), size-1);
...
 
size-1 для того, чтобы последний байт оставить под '\0' (хотя может и попутал  Улыбающийся)
Записан
Sacha
Гость
« Ответ #3 : Ноябрь 07, 2009, 01:05 »

спасибо
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 07, 2009, 12:24 »

size-1 для того, чтобы последний байт оставить под '\0' (хотя может и попутал  Улыбающийся)
Ничего не попутал, просто надо добавить

Цитировать
str[size - 1] = 0;

Перед или до - без разницы. strncpy не добавит 0 если источник >= 128
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Ноябрь 07, 2009, 16:49 »

Ничего не попутал, просто надо добавить

Цитировать
str[size - 1] = 0;

Перед или до - без разницы. strncpy не добавит 0 если источник >= 128


А если кол-во симолов в строке меньше 127, а скажем 10, то в ней будет мусор вплоть до символа нуля.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Ноябрь 07, 2009, 17:30 »

А если кол-во симолов в строке меньше 127, а скажем 10, то в ней будет мусор вплоть до символа нуля.
Будет, но после нулевого терминатора в buf[10]
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.252 секунд. Запросов: 23.