Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели 
V
    Опции темы
Barabeo
Дата 5.11.2012, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Что я делаю не правильно?
Код

string str = "/K netsh int ip set addr name=\"lan\" static 10.10.10.10 255.0.0.0 10.10.10.10";
    char *buf = new char[str.size()];
    memcpy(buf, str.c_str(), str.size());
    wchar_t enter[sizeof(buf)];
    DWORD size = sizeof(buf);

    MultiByteToWideChar(CP_ACP, 0, buf, size, enter, size);

PM MAIL   Вверх
kosmonaFFFt
Дата 5.11.2012, 10:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Цитата(Barabeo @  5.11.2012,  13:27 Найти цитируемый пост)
char *buf = new char[str.size()];

Надо new char[str.size() + 1] для \0 в конце строки.


Цитата(Barabeo @  5.11.2012,  13:27 Найти цитируемый пост)
wchar_t enter[sizeof(buf)];

sizeof(buf) вернет размер указателя, а не размер выделенной области, надо str.size() + 1


--------------------
user posted image
PM MAIL ICQ   Вверх
Barabeo
Дата 5.11.2012, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Код

    string str = "/K netsh int ip set addr name=\"lan\" static 10.10.10.10 255.0.0.0 10.10.10.10";
    char *buf = new char[str.size()+1];
    memcpy(buf, str.c_str(), str.size());
    wchar_t enter[sizeof(str.size()+1)];
    DWORD size = sizeof(str.size()+1);


Всё равно выходит абракадабра в enter.

Это сообщение отредактировал(а) Barabeo - 5.11.2012, 11:13
PM MAIL   Вверх
kosmonaFFFt
Дата 5.11.2012, 11:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



А завершающий "\0" в buf где?

Цитата(Barabeo @  5.11.2012,  15:13 Найти цитируемый пост)
wchar_t enter[sizeof(str.size()+1)];

Так не пойдет, надо динамический массив.
wchar_t* enter = new wchar_t[str.size() + 1]



--------------------
user posted image
PM MAIL ICQ   Вверх
feodorv
Дата 5.11.2012, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(kosmonaFFFt @  5.11.2012,  12:33 Найти цитируемый пост)
надо динамический массив

Не обязательно динамический, но такого 
Цитата(Barabeo @  5.11.2012,  12:13 Найти цитируемый пост)
sizeof(str.size()+1)

быть не должно, никогда. str.size()+1 имеет тип интегер, а sizeof(интегер) - всего 4 байта. Применение sizeof должно быть адекватным, это не панацея. 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 5.11.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



Всё равно не то:
Код

    string str = "/K netsh int ip set addr name=\"lan\" static 10.10.10.10 255.0.0.0 10.10.10.10";
    char *buf = new char[str.size()+1];
    memcpy(buf, str.c_str(), str.size());
    wchar_t *enter = new wchar_t[str.size() + 1];
    DWORD size = sizeof(enter);

    MultiByteToWideChar(CP_ACP, 0, buf, size, enter, size);


PM MAIL   Вверх
borisbn
Дата 5.11.2012, 16:13 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Barabeo @  5.11.2012,  14:32 Найти цитируемый пост)
DWORD size = sizeof(enter);

всё те же грабли. sizeof( enter ) == sizeof( wchar_t * ), т.е. 4 или 8 байт
и ещё. зачем тебе лишнее копирование в buf ?
В общем, сделай как-то так
Код
    string str = "/K netsh int ip set addr name=\"lan\" static 10.10.10.10 255.0.0.0 10.10.10.10";
    size_t strLength = str.size();
    wchar_t * w_str = new wchar_t[ strLength + 1 ];
    MultiByteToWideChar( CP_ACP, 0, str.c_str(), strLength, w_str, strLength );

Кстати, можно ещё проще
Код
    wstring str = L"/K netsh int ip set addr name=\"lan\" static 10.10.10.10 255.0.0.0 10.10.10.10";

 smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 5.11.2012, 16:17 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(borisbn @  5.11.2012,  17:13 Найти цитируемый пост)
Кстати, можно ещё проще

Вот именно.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Barabeo
Дата 5.11.2012, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010

Репутация: нет
Всего: нет



О thank you!
Теперь всё работает!
Код

LPWSTR str = L"/K netsh int ip set addr name=\"lan\" static 10.10.10.10 255.0.0.0 10.10.10.10";

    CreateProcess(L"C:\\WINDOWS\\system32\\cmd.exe",
        str,
        NULL,
        NULL,
        FALSE,
        CREATE_NEW_CONSOLE,
        NULL,
        NULL,
        &si, &pi);


Ещё один вопрос.  Дело в том что мне нужно выполнить вот это:
netsh int ip set addr name="lan" static 10.10.10.10 255.0.0.0 10.10.10.10
netsh int ip set dns name="lan" static 194.158.204.238
netsh int ip add dns name="lan" 10.10.10.10


Получается на каждую строчку нужен отдельный Create Process?
PM MAIL   Вверх
feodorv
Дата 5.11.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Barabeo @  5.11.2012,  17:40 Найти цитируемый пост)
Получается на каждую строчку нужен отдельный Create Process? 

Ну да.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.