2016-11-03 3 views
0

私のコードの最初の部分は実行したいが、ネットローカルグループ管理者を使ってアカウント管理者になると、コードがクラッシュし、 "私たちのプライバシーに関する声明をオンラインで読む。 .. "だから私のコードは私のPCにいくつかの赤い旗を設定していると仮定しています。私はこのコードを正しく実行したいだけです。このような問題を解決する方法がわかりません。ネットローカルグループ管理者が私のコードをクラッシュする

#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) 

を行うときには正常に動作します。

何をしていません
const char* mkadm = mkadm; 

:これはあなたの問題である

+1

最小限の例を、してください。 1つの 'system(net localgroup ...')行でクラッシュを再現できますか? – MSalters

+0

質問に追加しました – Dog9w23

答えて

0

恐ろしいの書式設定のため申し訳ありませんが、私はそこにvaribleを使用するとき、それは同じようにdoesntの、および/または私は「CONSTのchar *」を使用する場合 あなたは望んでいた。右側のmkadmは、あなたが定義した変数であり、外側のブロックのstd::stringではありません。言い換えれば、変数をそれ自身と等しくなるように初期化しておき、メモリ内のどこかにランダムなポインタで巻き上げることになります。

二つの変数に異なる名前を付けて、あなたの問題が離れて行くだろう。

const char * mkadm2 = mkadm.c_str(); 
system(mkadm2); 
関連する問題