Getline() выводит значение null при передаче указателя из внешней функции в cLinux

Ответить
Anonymous
 Getline() выводит значение null при передаче указателя из внешней функции в c

Сообщение Anonymous »


Я пытаюсь прочитать строку из файла, когда я использую getline непосредственно в функции пакетного режима, все работает нормально, но когда я реорганизую код в отдельную функцию, это выдает ошибку.

int main(int argc, char *argv[]) { если (арг > 2) вернуть EXIT_FAILURE; пакетный_режим (argv [1]); вернуть EXIT_SUCCESS; } функция пакетного режима

void patch_mode(char *path) { символ *строка = NULL; ошибка ssize_t = 0; символ *cmd = NULL; ФАЙЛ *file = fopen(путь, "r"); если (файл == NULL) { printf("Не удалось прочитать файл\n"); возвращаться; } пока (ошибка!= -1) { read_line (строка, файл, cmd); ошибка = -1; int поток = вилка (); если (поток == 0) { char *myargs[] = {NULL}; execv (cmd, myargs); } еще { поток = ожидание (NULL); } } если (файл != NULL) fзакрыть (файл); бесплатно (линия); } строки читаются правильно в этой функции при printf, но выводят значение null в функции пакетного режима

ssize_t read_line(char *line, FILE *file, char *cmd) { size_t лен = 0; ssize_t читать = 0; read = getline(&line, &len, file); printf("%s\n", строка); если (читай == -1) { printf("Не удалось прочитать строку\n"); вернуть -1; } символ *copy = строка; cmd = strsep(&copy, " "); printf("%s\n", cmd); вернуть 0; } и при попытке выполнения этого кода выдает, что не может прочитать файл, поскольку он выполняется более одного раза
void patch_mode(char *path) { символ *строка = NULL; ошибка ssize_t = 0; символ *cmd = NULL; ФАЙЛ *file = fopen(путь, "r"); если (файл == NULL) { printf("Не удалось прочитать файл\n"); возвращаться; } while ((error = read_line(line, file, cmd)) != -1) { int поток = вилка (); если (поток == 0) { char *myargs[] = {NULL}; execv (cmd, myargs); } еще { поток = ожидание (NULL); } } если (файл != NULL) fзакрыть (файл); бесплатно (линия); }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»