0

我正在尝试通过我的程序执行最多可处理 4 个参数的 UNIX 命令,为什么这会产生段错误或其他错误?

using namespace std;

int main() {

char buffer[255];
cin >> buffer;


char* firstPtr;
char* secondPtr;
char* thirdPtr;
char* fourthPtr;

firstPtr = strtok(buffer, " ");
secondPtr = strtok(NULL, " ");
thirdPtr = strtok(NULL, " ");
fourthPtr = strtok(NULL, " ");


execlp(firstPtr, secondPtr);


   return 0;
}
4

3 回答 3

2

崩溃是因为你的buffer溢出。

尝试使用std::cin.getline(buffer, sizeof(buffer))而不是std::cin >> buffer
还注意strtok可能会返回NULL,所以一定要处理它。

于 2013-11-05T06:31:27.047 回答
1

我认为你应该使用

char buffer[255];
cin.getline(buffer, 255);

否则你的第二个、第三个和第四个指针将为空。

于 2013-11-05T06:29:33.353 回答
1

如果您查看 的手册页execlp您会注意到第一个参数(方法的第二个参数,arg0参数)是强制性的,除了您可能通过可变参数传递给函数的任何其他参数之外 - 还提到了在文本中

参数列表必须由 NULL 指针终止。

第一个参数(在您的情况下为 secondPtr)应该是可执行文件的名称;因此,您在此处传入 NULL 违反了约定(因为cin >>其他人已经指出)。

但除此之外,您最后还缺少至少一个参数,需要NULL.

因此,强烈建议学习手册页!

于 2013-11-05T06:38:01.057 回答