Ошибка сегментации при использовании popen ()
Ваша проблема, вероятно, здесь:
strcat(chaine,string);
если входной параметр строка больше, другие поля слишком велики для chaine , и в этом случае вы выписываете его с неопределенным поведением (в вашем случае это кажется крушением) )
Вычислите необходимую длину, затем выделите строку перед тем, как ее заполнить.
Обратите внимание, что вы можете сделать это ленивым образом с двумя вызовами snprintf , первым для вычисления необходимого размера и вторым для заполнения команды. Это ленивый способ, потому что здесь вы просто объединяете строки, вы не пишете числа и т. Д., Нуждающиеся в непостоянном размере.
Однако это также может быть здесь после popen :
sprintf(password,"%32s",path);
потому что пароль имеет размер 32 и sprintf будет записывать 33 символа, чтобы также поместить окончательный нулевой символ
И если вы чудесным образом вернетесь из функции, вы, вероятно, не выживете от использования результата, поскольку он равен NULL или указатель на стек, который больше не действителен : пароль локальная переменная, поэтому strtok возвращает значение NULL или адрес пароль становится результатом функции