2015-11-17 18 views
3

Я разрабатываю программное обеспечение с Qt5 для отправки sms на моем mac. Я использую UMTS Stick и библиотеку "unistd.h" для записи в дескриптор файла. Проблема в том, что я не знаю, как использовать функцию "ssize_t write(int fd, const void *buf, size_t count)". В Qt5 у меня есть QTextEdit, и я хотел бы передать текст внутри как параметр функции write.Преобразование QString в const void *

У меня нет ошибок со следующим кодом, но он не работает. Есть ли ошибка?

QString smsText = ui->smsTextField->toPlainText(); 

std::string utf8_text = smsText.toUtf8().constData(); 
const void * a = utf8_text.c_str(); 

write(fd, &a, sizeof(a)); 
+0

Тот факт, что вы проходите проверку компилятора C++, не означает, что результат будет иметь смысл! «unistd.h» в частности очень примитивен и не проверяет его аргументы. 'void *' _literally_ может быть любым. Вы можете передать Unicode в любой кодировке, и он с радостью примет его. То, что делает читаемое SMS, - это просто удача. – MSalters

+0

Каков тип дескриптора файла? В зависимости от его типа вы можете или не можете использовать класс QT для доступа к тем же функциям. – fjardon

ответ

2

Try:

write(fd, utf8_text.c_str(), utf8_text.size()); 

&a содержит адрес вашего void указателя. Кроме того, sizeof(a), когда a является указателем, всегда будет возвращать ту же длину (возможно, 4 или 8 байтов в зависимости от вашей архитектуры).

+0

спасибо за это: D ... – masterWN

+0

В качестве дальнейшего улучшения нет необходимости в создании строки std ::, из-за которой вы можете выделить еще одну * кучку и скопировать ее. Просто сохраните то, что у вас уже есть: 'const QByteArray utf8String = string.toUtf8(); write (fd, utf8String.constData(), utf8String.size()); ' – peppe

3

Есть две проблемы, связанные с этим. В качестве параметров вы используете &a и sizeof(a). Это в основном означает, что вы записываете адрес, хранящийся в указателе a, в поток.

Вы должны вместо этого передать данные на, которые касаются, с размером заданной длины струны:

write(fd, a, utf8_text.size()); 
Смежные вопросы