0

フォルダのアクセス許可を変更するAC実行可能ファイルを作成しています。

#include<stdio.h>
#include<dos.h>
main()
{
system("cacls foldername /e /p everyone:n");
}

フォルダが配置されている場所に存在するはずのファイルが生成され、コンパイル時にフォルダ名を追加する必要があります。しかし、私がこれをしているとき

char foldername[15];
printf("Enter the foldername");
scanf("%s",foldername);
system("cacls %s /e /p everyone:n");

その後、それは機能していません....!これで私を助けてください!

4

1 に答える 1

3

への呼び出しsystem()はまったく使用foldernameされません。コマンド文字列を作成してから、次を呼び出す必要がありますsystem()

char foldername[15];
printf("Enter the foldername");
scanf("%s", foldername);

char command[100];
sprintf(command, "cacls %s /e /p everyone:n", foldername);
system(command);

もちろん、このコードはバッファ オーバーフローに対して脆弱です。ユーザーがフォルダ名に 14 文字を超える文字を入力すると、への呼び出しがバッファscanf()の外に書き込みfoldername、未定義の動作を引き起こします。あなたの質問にはC++のタグが付けられておりstd::string、メモリの安全な動的割り当てを管理しています:

using namespace std;

string foldername;
cout << "Enter the folder name: ";
getline(cin, foldername);

ostringstream command;
command << "cacls " << foldername << " /e /p everyone:n";
system(command.str().c_str());

実際に C++ を使用している場合は、より安全な方法をお勧めします。

于 2012-11-16T09:04:16.483 に答える