crossplatform.ru

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


  Ответ в QString -> char
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Игорь Дата 30.10.2010, 20:29
  Спасибо Вам большое!
Очень познавательно. Есть что новое для себя взять)
Алексей1153 Дата 30.10.2010, 20:02
 
//это, допустим, параметры функции
const char* user="Администратор";
const char* pass="123";

//тут собираем строку
std::string s;

s+="net user ";
s+=user;
s+=" ";
s+=pass;

//s.c_str() - готовая const char* строка



Цитата(Гость_Игорь_* @ 30.10.2010, 22:51) *
Я даже не понял почему.

символы, заключённые в кавычки, являются СТРОКОЙ. Такая строка в общем случае размещается в сегменте данных (его менять нельзя, как раз тот сигнал и вылетел у тебя) и представляет собой массив символов между кавычками + завершающий нулевой символ. Само же выражение строка - это указатель на const char

например,

const char* p="123";// в памяти строка будет такая: {0x31,0x32,0x33,0} , указатель на символ 0x31 запишется в p
Игорь Дата 30.10.2010, 19:51
  Попробую по порядку.
Я пишу клиент, который, в данном коде, принимает имя и пароль.
Этот клиент должен назначить под это имя учетной записи пароль, который передал сервер.

Ход моей логики:
Принимаю строку (пусть даже массив символов) и записываю в переменную
Надо составить команду для командной строки, например, в виде: "net user Администратор 123",
где "net user " команда, "Администратор" имя пользователя, "123" новый пароль
Составленную команду надо передать в командную строку для выполнения.

Переменную "а" я ввел только из-за того, что забыл как добавлять пробел

Поставил фигурные скобки из-за того, что в начале у меня компилятор ругался, писал что массив надо поместить в фигурные скобки. Когда Вы (Алексей1153) еще раз написали пример, то у меня уже компилятор не ругался. Я даже не понял почему.
kwisp Дата 30.10.2010, 19:31
  Гость_Игорь_
код с циклами непонятен ни капли. зачем так делать ?
опиши по-подробнее задачу словами.
если ты из сигнала получаешь QString, а функция system принимает const char*, то в классе QString есть специализированные методы для преобразования .toAscii().constData() - вернет const char*

Алексей1153 Дата 30.10.2010, 19:31
  Игорь, а я вовсе не так показывал. Откуда у тебя квадратные и фигурные скобки взялись?
Цитата
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" - я не понял


И, всё-таки, расскажи про задачу, а то хрень какую-то пишешь...
Игорь Дата 30.10.2010, 19:11
  Сигнал был где первый цикл for(i=0;user[i]!=0;i++)qwe2[9+i]=user[i];
Игорь Дата 30.10.2010, 19:09
 
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*)"
Алексей1153 Дата 30.10.2010, 18:37
  так передавай как const char* да и всё :)

а вытащить указатель на строку можно так:
constData()
Игорь Дата 30.10.2010, 18:34
  Тут идея вот в чем, переменные user и pass будут передаваться этой программе строкой, поэтому я заморачиваюсь со стрингом
Алексей1153 Дата 30.10.2010, 18:26
  имхо, нужно сделать как в начале, только вот так

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


const char* user="Администратор";
const char* pass="123";
const char* qwe2="net user ";
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 5:27