我正在创建一个更改文件夹权限的c可执行文件。

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

那就没用了。。。。!请帮帮我!!

最佳答案

您对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++,我宁愿使用更安全的方法。

09-27 16:10