2016-11-03 5 views
0

Первая часть моего кода работает, как я хочу, но когда я иду, чтобы сделать администратор учетной записи с помощью сетевых администраторов локальной группы, произойдет сбой кода, и я получаю сообщение с сообщением «Прочитайте наше заявление о конфиденциальности онлайн. .. ", поэтому я предполагаю, что мой код устанавливает некоторые красные флаги в моем компьютере. Я просто хочу, чтобы этот код работал правильно, и я не уверен, как исправить такую ​​проблему.Администраторы локальной локальной сети сбивают мой код

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <cstdlib> 

int main() 
{ 
    std::string name; 
    std::string admin; 
    std::string pass; 
    std::string full; 
    std::string mkusr; 
    std::string mkadm; 
    std::string wait; 
    std::string passreq; 
    std::string times; 
    std::string passchg; 
    std::string comment; 
    std::string expires; 

    std::cout << "What is the new username?\n"; 
    getline (std::cin, name); 
    std::cout << "What is the full name? FIRSTNAME MIDDLEINITIAL LASTNAME\n"; 
    getline (std::cin, full); 
    std::cout << "What password should "<< name <<" have?\n"; 
    getline (std::cin, pass); 
    std::cout << "Is " << name << " an admin?\nY or N\n"; 
    getline (std::cin, admin); 
    std::cout << "Does " << name << " need to have a password\nY or N\n"; 
    getline (std::cin, passreq); 
    std::cout << "When is "<< name <<" authorised to be on? For 24/7 access please enter all\n\nFormat <M,T,W,Th,F,Sa,Su OR M-Su>,<1AM-12PM OR 01:00-23:00>\nTo input multiple time across different days use the ; symbol \nEXAMPLE: M,4AM-5PM;T,1PM-3PM;W-F,8:00-17:00\n"; 
    getline (std::cin, times); 
    std::cout << "Is " << name << " allowed to change his/her password\nY or N\n"; 
    getline (std::cin, passchg); 
    std::cout << "Please give a description for " << name << "\n"; 
    getline (std::cin, comment); 
    std::cout << "When will " << name << "s account expire? If it will never expire please type never\nFormat <MM/DD/YYYY> OR <DD/MM/YYYY> OR <mmm,dd EX:jan,9>\n"; 
    getline (std::cin, expires); 

    system ("cls"); 
    mkusr = "net user "; 
    mkusr += name; 
    mkusr += " "; 
    mkusr += pass; 
    mkusr += " /add "; 
    if (passreq == "Y"){ 
    mkusr += " /passwordreq:yes"; 
    } 
    else { 
     mkusr += " /passwordreq:no"; 
    }; 
    mkusr += (" /times:"); 
    times = '"' + times +'"'; 
    mkusr += times; 
    mkusr += " /fullname:"; 
    full = '"' + full +'"'; 
    mkusr += full; 
    if (passchg == "Y"){ 
    mkusr += " /passwordchg:yes"; 
    } 
    else{ 
     mkusr += " /passwordchg:no"; 
    }; 
    mkusr += " /comment:"; 
    comment = '"' + comment +'"'; 
    mkusr += comment; 
    mkusr += " /expires:"; 
    expires = '"' + expires +'"'; 
    mkusr += expires; 
    //net user 'name' 'pass' /add /passwordreq:'yes/no' /times:'times' /fullname:"'full name'" /passwordchg:'yes/no' /expires:'mm/dd/yyyy||dd/mm/yyy||never' /comment:'cmt' 

    //times format M,4AM-5PM;T,1PM-3PM;M-F,08:00-17:00 all 


    std::cout << mkusr; 

    const char* mkuser = mkusr.c_str(); 
    system(mkusr.c_str()); 
    //system("net user /add << name << pass << /FULLNAME:<<full<<"); 







    // THIS IS THE PROBLEM AREA 

    if (admin == "Y"){ 
    std::cout << "Ok, I will make " << name << " an admin\n Please press any key to make "<< name <<"an admin."; 

    getline (std::cin, wait); 

    mkadm = "net localgroup administrators "; 
    mkadm += name; 
    mkadm += " /add"; 

    std::cout << "\n " << mkadm; 

    const char* mkadm = mkadm; 
    system(mkadm); 
    //system("net localgroup administrators << name << /add"); 
// THIS IS THE PROBLEM AREA 






    } 
    getline (std::cin, wait); 
    return 0; 

} 

, когда я делаю код, который имеет только раздел проблемы я получаю тот же крах `

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <cstdlib> 

int main() 
{ 
    std::string name; 
    std::string admin; 
    std::string wait; 
    std::string mkadm; 

    getline (std::cin, admin); 
if (admin == "Y"){ 
    std::cout << "Ok, I will make " << name << " an admin\n Please press any key to make "<< name <<"an admin."; 

    getline (std::cin, wait); 

    mkadm = "net localgroup administrators "; 
    mkadm += name; 
    mkadm += " /add"; 

    std::cout << "\n " << mkadm; 

    const char* mkadm = mkadm; 
    system(mkadm); 
     } 
    getline (std::cin, wait); 
    return 0; 

}` 

Но когда я делаю только

system(net localgroup administrators Test /add) 

Он отлично работает. Он просто не любит, когда я использую varible там и/или при использовании «константный символ *» Извините за ужасное форматирование

+1

Минимальный пример, пожалуйста. Можете ли вы воспроизвести сбой с помощью одной системы («net localgroup ...» line? – MSalters

+0

Я добавил ее к вопросу – Dog9w23

ответ

0

Это ваша проблема:

const char* mkadm = mkadm; 

Это не делать то, что вы надеялись. mkadm в правой части - это переменная, которую вы только что определили, а не std::string из внешнего блока. Другими словами, вы инициализируете переменную равным себе и сворачиваете со случайным указателем на где-то в памяти.

Дайте две переменные разные имена и ваша проблема исчезнет:

const char * mkadm2 = mkadm.c_str(); 
system(mkadm2);