我正在创建一个更改文件夹权限的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++,我宁愿使用更安全的方法。