【发布时间】:2022-12-01 16:21:18
【问题描述】:
C 的新手。目前正在做一个项目,我一直停留在这一部分:
int main(int argc, char **argv) {
if (argc != 4) {
printf("Not 4 args!", argv[0]);
exit(-1);
}
int t = atoi(argv[1]);
int v = atoi(argv[2]);
int r = atoi(argv[3]);
for (int i = 0; i < r; i++) {
//argv[3] = i;
fork();
if (fork == 0) {
argv[0] = "./sim";
execve("./sim", argv, NULL);
}
}
wait(NULL);
float sum = 0.0;
for (int i = 0; i < r; i++) {
float num;
sprintf(fname, "robot-output-%d.txt", i);
FILE *fd = fopen(fname, "r");
while (!feof(fd)) {
fscanf(fd, "%f", &num);
}
sum += num;
}
printf("Simulation Complete!\nSTAD: %f cm.\n", sum / v );
}
我一直在尝试使 argv[3] 等于 i 以便当我调用 exec 时它会(例如:argv[3] = 3)执行 ./sim argv[1] argv[2] 3 => ./sim argv[1] argv[2] 2 => ./sim argv[1] argv[2] 1 等等 这可能吗?
我只试过 argv[3] = i,但没有用,因为 argv[3] 不是整数。 我也试过用 itoa(i) 将 i 变成一个字符串,但也没有用。
任何建议或帮助都会很棒!谢谢!
【问题讨论】:
-
我建议您将 argv 视为只读。 argv[3] 的类型是一个 char * 那么当你试图给它分配一个 int 时你期望什么?要么创建一个新的 char *[],要么只使用允许您传入 argv 参数的 exec 函数之一(execlp、execl、execl)。
-
如果尝试复制到
argv,strncpy可能更合适。假设一个人决定这实际上是一个好主意。 -
@the busybee 我误解了,你是对的。
标签: c