所以该程序应该做什么:通过键入restrict限制应用程序在mac上打开。它应该允许通过使用与以前相同的名称再次键入restrict来访问应用程序。
该程序正在做什么:限制应用程序工作正常。但是当我再次输入restrict时,会出现以下输出:
CandyBar
\277_\377CandyBar
\277_\377Restricting application
chmod: /Applications/CandyBar
\277_\377.app: No such file or directory
chown: /Applications/CandyBar
\277_\377.app: No such file or directory
chmod: /Applications/CandyBar
\277_\377.app: No such file or directory
正如您所看到的,它在字符串末尾添加了字符\277_\377
。这是我的源代码:
for (int i = 0; strlen(argument) + 14 >= i; i++) {
argument[i] = '\0';
}
cout << argument;
getArguments();
argument[strlen(argument) - 1] = '\0';
cout << argument;
string application(argument);
cout << application;
if (!restrictedApplication[application]) {
restrictedApplication[application] = false;
}
if (restrictedApplication[application] == false) {
cout << "Restricting application\n";
restrictedApplication[application] = true;
string fullCommand =
"chmod -x '/Applications/" + application + ".app';" +
"chown root '/Applications/" + application + ".app';" +
"chmod 000 '/Applications/" + application + ".app'";
char fullCommandChar[256];
for (int i = 0; fullCommand[i] != '\0'; i++) {
fullCommandChar[i] = fullCommand[i];
}
system(fullCommandChar);
}
else {
cout << "Restoring application\n";
restrictedApplication[application] = false;
string fullCommand =
"chmod +x '/Applications/" + application + ".app';" +
"chown jamespickering '/Applications/" + application + ".app';" +
"chmod 777 '/Applications/" + application + ".app'";
char fullCommandChar[256];
for (int i = 0; fullCommand[i] != '\0'; i++) {
fullCommandChar[i] = fullCommand[i];
}
system(fullCommandChar);
}
答案 0 :(得分:5)
这可能是因为它在字符串末尾寻找\0
字符,但它从未收到它。
我还没有深入研究你的代码,但我发现你正试图在这里做到这一点。
argument[strlen(argument) - 1] = '\0';
当我找到\0
发生错误的地方时,我会编辑我的帖子,因为这就是产生奇怪的内容
\277_\377
输出。
编辑:
for (int i = 0; strlen(argument) + 14 >= i; i++) {
argument[i] = '\0';
}
你想用这部分代码做什么?
这实际上是循环并将\0
从index 0
添加到length of the string plus 14
到参数。这应该通过参数的数组大小,对吗?有人可以解释这甚至可以显示输出吗?
答案 1 :(得分:1)
下面:
for (int i = 0; strlen(argument) + 14 >= i; i++) {
argument[i] = '\0';
}
cout << argument;
您将argument
的第一个元素设置为0
,然后尝试输出它。你究竟要输出什么?你这样做时就清空了字符串。