Некоторые системы на самом деле имеют три аргумента main
, где третий аргумент содержит переменные среды. Вы бежите из конца argv
(как отмечает Игорь Окс) и попадаете в список переменных среды; если вы посмотрите на переменные окружения, вы должны увидеть SSH_AGENT_PID
со значением 2547 (или другим числом).
Ваш цикл должен выглядеть примерно так:
for(i = 2; i < argc; i++)
fprintf(fp, "%s ", argv[i]);
Вас не волнует argv[0]
, и вы уже использовали argv[1]
для имени файла, поэтому вы хотите начать с argv[2]
, а не добавлять 2 к i
.
Я также изменил ваш fprintf
вызов, чтобы использовать явную строку формата. Если вы этого не сделаете, то, что находится в argv[i]
, будет интерпретировано как строка формата, и вы получите странные вещи, если argv[i]
содержит знак процента.
Кроме того, похоже, что вы изучаете программирование на С, когда вы вошли в систему как пользователь root. Это плохая идея. Очень очень плохая идея. Еще хуже идея, что при выполнении обычных задач вы вошли в систему как root. Вы должны войти в систему как обычный пользователь, чтобы случайно не удалить /dev
или что-то еще.