Russian Qt Forum

Qt => Общие вопросы => Тема начата: Sacha от Ноябрь 06, 2009, 23:58



Название: string to char[128]
Отправлено: Sacha от Ноябрь 06, 2009, 23:58
Подскажите пожалуйста как присвоить значение qstring char[128]?


Название: Re: string to char[128]
Отправлено: Sacha от Ноябрь 07, 2009, 00:06
Qt v4.2.2

string.toAscii().data();
пишет что не может присвоить char* to char[128]


Название: Re: string to char[128]
Отправлено: MoPDoBoPoT от Ноябрь 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' (хотя может и попутал  :))


Название: Re: string to char[128]
Отправлено: Sacha от Ноябрь 07, 2009, 01:05
спасибо


Название: Re: string to char[128]
Отправлено: Igors от Ноябрь 07, 2009, 12:24
size-1 для того, чтобы последний байт оставить под '\0' (хотя может и попутал  :))
Ничего не попутал, просто надо добавить

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

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


Название: Re: string to char[128]
Отправлено: Alex Custov от Ноябрь 07, 2009, 16:49
Ничего не попутал, просто надо добавить

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

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


А если кол-во симолов в строке меньше 127, а скажем 10, то в ней будет мусор вплоть до символа нуля.


Название: Re: string to char[128]
Отправлено: Igors от Ноябрь 07, 2009, 17:30
А если кол-во симолов в строке меньше 127, а скажем 10, то в ней будет мусор вплоть до символа нуля.
Будет, но после нулевого терминатора в buf[10]