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 回答