crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QString -> char
Гость_Игорь_*
сообщение 30.10.2010, 18:02
Сообщение #1





Гости








    


Здравствуйте, программисты!
Вот сложность возникла. Нужно написать прогу кроссплатформенную на Qt, но там не все прокатывает, что прокатывает в обычном С++. Вот код:

    string user="Строчка";
    char* qwe1;
    int i=0;
    for(i=0;user[i]!=0;i++){};
    qwe1=new char[i];
    for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];


В обычном си++ компилит нормально и запускается, а здесь компилятор ругается. Он показывает на последнюю строчку и пишет "cannot convert "QCharRef' to 'char' in assignment". Что делать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.10.2010, 18:12
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


...=user.c_str();

только при чём тут QString - непонятно :)

а ещё, складывается впечатление, что что-то недоговаривается. Какая задача то ?

Сообщение отредактировал Алексей1153 - 30.10.2010, 18:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Игорь_*
сообщение 30.10.2010, 18:24
Сообщение #3





Гости








    


Да это я продолжаю темы из предыдущего топика, где мне надо было в командную строку передать команды.
Прошу прощения, пример вытащил, не задумываясь о синтаксисе, из обычного с++. Вот как код выглядит у меня в Qt:

//#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QProcess>

int main(int argc, char *argv[])
{
    QString user="Администратор";
    QString pass="123";
    QString qwe2="net user ";
    char a[]=" ";
    char* qwe1;
    int i=0;
    for(i=0;user[i]!=0;i++)qwe2[9+i]=user[i];
    i=i+9;
    for(int j=0;a[j]!=0;j++)qwe2[i+j]=a[j];
    i++;
    int j=0;
    for(j=0;pass[j]!=0;j++)qwe2[j+i]=pass[j];

    //первый вариант моей пробы
    qwe1=new char[i];
    for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];

    system(qwe1);

    return 0;
}


        //Второй вариант пробы
        qwe1=new char[qwe2.size()+1];
        strcpy (qwe1, qwe2.c_str());


Во втором варианте компиль нугается: "'class QString' has no member named 'c_str'"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.10.2010, 18:26
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


имхо, нужно сделать как в начале, только вот так

const char* user="Строчка";


const char* user="Администратор";
const char* pass="123";
const char* qwe2="net user ";
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Игорь_*
сообщение 30.10.2010, 18:34
Сообщение #5





Гости








    


Тут идея вот в чем, переменные user и pass будут передаваться этой программе строкой, поэтому я заморачиваюсь со стрингом
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.10.2010, 18:37
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


так передавай как const char* да и всё :)

а вытащить указатель на строку можно так:
constData()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Игорь_*
сообщение 30.10.2010, 19:09
Сообщение #7





Гости








    


int main(int argc, char *argv[])
{
    const char* user[]={"Администратор"};
    const char* pass[]={"123"};
    const char* qwe2[]={"net user "};
    const char* a[]={" "};
    int i=0;
    for(i=0;user[i]!=0;i++)qwe2[9+i]=user[i];
    i=i+9;
    for(int j=0;a[j]!=0;j++)qwe2[i+j]=a[j];
    i++;
    int j=0;
    for(j=0;pass[j]!=0;j++)qwe2[j+i]=pass[j];

    //system(qwe2);

    return 0;
}
}


При отладочной компиляции:
Цитата
Приложение остановлено, так как оно получило сигнал от операционной системы.
Сигнал: SIGSEGV
Назначение: Segmentation fault


При обычной компиляции:
Цитата
Запускается С:\Qt\2010.05\qt\Clients-build-desktop\debucj\Clients.exe...
C:\Qt\2010.05\qt\C3^ents-huild-desktop\dehutj\Clients.exe завершился с кодон -1073741819


Если убрать комментарии с system(qwe2); то ошибка: "cannot convert 'const char**' to 'const char*' for argument 'Г to 'int system(const char*)'"
Убираю со всех переменных слово const, ошибка "cannot convert char** to const char* for argument 1 to int system(const char*)"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Игорь_*
сообщение 30.10.2010, 19:11
Сообщение #8





Гости








    


Сигнал был где первый цикл for(i=0;user[i]!=0;i++)qwe2[9+i]=user[i];
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.10.2010, 19:31
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Игорь, а я вовсе не так показывал. Откуда у тебя квадратные и фигурные скобки взялись?
Цитата
const char* user[]={"Администратор"};
const char* pass[]={"123"};


а тут вообще капец
Цитата
const char* a[]={" "};
const char* qwe2[]={"net user "};

это должны быть переменные, а не константы.


короче:
    const char* user="Администратор";
    const char* pass="123";
    std::vector<char> qwe2;

для чего тебе массив "a" - я не понял


И, всё-таки, расскажи про задачу, а то хрень какую-то пишешь...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 30.10.2010, 19:31
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Гость_Игорь_
код с циклами непонятен ни капли. зачем так делать ?
опиши по-подробнее задачу словами.
если ты из сигнала получаешь QString, а функция system принимает const char*, то в классе QString есть специализированные методы для преобразования .toAscii().constData() - вернет const char*

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 15:52