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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в char массив добавить символ 
V
    Опции темы
Barabeo
Дата 27.10.2012, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Щас добавим.
Только вот новая проблема возникла с типами данных.
Не могу преобразовать из char в wchar_t т.к. NetUserAdd принимает имя в wchar_t:
Код

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <lm.h>
#include <sstream>

#pragma comment(lib, "netapi32.lib")

//функция конвертирования char в wchar_t
bool char2wchar_t(char *str1, wchar_t *str2)
{
    std::wstringstream st;
    st << str1;
    return !(st >> str2).fail();
};

int main(int argc, char** argv)
{
    char compname[MAX_COMPUTERNAME_LENGTH+1];
    char temp[MAX_COMPUTERNAME_LENGTH+2];
    DWORD size = sizeof(compname)-1;
    int i,j;
    wchar_t* username;

    GetComputerNameA(compname,&size);//получаем имя компа

    printf("%s\n",compname);
    temp[0]='u';//добавляем букву 'u' к имени компа
    for(i=1,j=0; j<8; i++, j++)
    {
         temp[i] = compname[j];
    }
    temp[i]= '\0';
    printf ("%s\n",temp);//выводим имя которое будет присвоено пользователю
    
    //создаем пользователя
    USER_INFO_1 ui;
    DWORD dwLevel = 1;
    DWORD dwError = 0;
    NET_API_STATUS nStatus;
    
    //крнвертируем имя пользователя из char в wchar_t
    char2wchar_t(temp,username);

    ui.usri1_name = username;
    ui.usri1_password = username;
    ui.usri1_priv = USER_PRIV_USER;
    ui.usri1_home_dir = NULL;
    ui.usri1_comment = NULL;
    ui.usri1_flags = UF_SCRIPT;
    ui.usri1_script_path = NULL;
    //добавляем пользователя
    nStatus = NetUserAdd(username, dwLevel,(LPBYTE)&ui,&dwError);

    if (nStatus == NERR_Success)
       fwprintf(stderr, L"User %s has been successfully added on %s\n",
               username, username);
 
    else
       fprintf(stderr, "A system error has occurred: %d\n", nStatus);

    //system("pause");
    return 0;
}


Поэтому вылетает с ошибкой:
Run-Time Check Failure #3 - The variable 'username' is being used without being initialized.
PM MAIL   Вверх
feodorv
Дата 27.10.2012, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Barabeo @  27.10.2012,  01:03 Найти цитируемый пост)
Поэтому вылетает с ошибкой:

Правильно делает. Под compname и temp Вы память отвели, а под username - нет. Прописан просто указатель, де ещё и неинициализированный никак.


Цитата(Barabeo @  27.10.2012,  01:03 Найти цитируемый пост)
bool char2wchar_t(char *str1, wchar_t *str2)
{
    std::wstringstream st;
    st << str1;
    return !(st >> str2).fail();
};

Что это??? Пользуйтесь MultiByteToWideChar smile 


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


Бывалый
*


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

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



Всё равно не могу победить:
Код

int main(int argc, char** argv)
{
       char compname[MAX_COMPUTERNAME_LENGTH+1];
    char temp[MAX_COMPUTERNAME_LENGTH+2];
       DWORD size = sizeof(compname)-1;
    int i,j;
       wchar_t username[MAX_COMPUTERNAME_LENGTH];

    GetComputerNameA(compname,&size);//получаем имя компа
    /*
    if( !GetComputerNameA(compname,&size) )
    {
    printf( "Error of  GetComputerNameA\n" );
    return -1;
    }
    compname[MAX_COMPUTERNAME_LENGTH] = '\0';
    */
    printf("%s\n",compname);
    temp[0]='u';//добавляем букву 'u' к имени компа
    for(i=1,j=0; j<MAX_COMPUTERNAME_LENGTH; i++, j++)
    {
         temp[i] = compname[j];
    }
    temp[i]= '\0';
    printf ("%s\n",temp);//выводим имя которое будет присвоено пользователю
    
    //создаем пользователя
       USER_INFO_1 ui;
    DWORD dwLevel = 1;
    DWORD dwError = 0;
    NET_API_STATUS nStatus;
    
    //конвертируем имя пользователя из char в wchar_t
    mbtowc(username, temp, MAX_COMPUTERNAME_LENGTH);

       ui.usri1_name = username;
    ui.usri1_password = username;
    ui.usri1_priv = USER_PRIV_USER;
    ui.usri1_home_dir = NULL;
    ui.usri1_comment = NULL;
    ui.usri1_flags = UF_SCRIPT;
    ui.usri1_script_path = NULL;
    //добавляем пользователя
    nStatus = NetUserAdd(username, dwLevel,(LPBYTE)&ui,&dwError);

    if (nStatus == NERR_Success)
       fwprintf(stderr, L"User %s has been successfully added on %s\n",
               username, username);
 
    else
       fprintf(stderr, "A system error has occurred: %d\n", nStatus);

    //system("pause");
    return 0;
}


PM MAIL   Вверх
feodorv
Дата 27.10.2012, 04:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Barabeo @  27.10.2012,  01:46 Найти цитируемый пост)
Всё равно не могу победить

Что именно? Как в char массив добавить символ? Вроде же победили...

Если что-то другое, то
  • заводите новую тему по новому вопросу
  • username делайте такого же размера, что и temp
  • проводите анализ ошибок (пример здесь)




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


Эксперт
***


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

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



ТС может быть все таки сначала стоит изучить язык Си ??? а потом уже что то писать ???


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Barabeo
Дата 29.10.2012, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что я неправильно здесь написал:
Код

mbtowc(username, temp, MAX_COMPUTERNAME_LENGTH+2);

При контрольных точках в username сидят какие-то иероглифы?
PM MAIL   Вверх
armida00
Дата 2.11.2012, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Со скобками у тебя массив null-терминальных строк, каждая из которых реализуется указателем на массив и декларируется как массив char, или как указатель на char, в результате получается массив массивов char, или массив указателей на char, который опять таки можно декларировать как массив указателей на char, массив массивов char, указатель на char[], или указатель на указатель на char, но не как char[].
PM MAIL WWW   Вверх
McMan
Дата 2.11.2012, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



armida00, ты взорвал мой мозкъ!
PM MAIL   Вверх
Barabeo
Дата 5.11.2012, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(armida00 @ 2.11.2012,  17:24)
Со скобками у тебя массив null-терминальных строк, каждая из которых реализуется указателем на массив и декларируется как массив char, или как указатель на char, в результате получается массив массивов char, или массив указателей на char, который опять таки можно декларировать как массив указателей на char, массив массивов char, указатель на char[], или указатель на указатель на char, но не как char[].

О ужас!
 smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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