Получение нулевого значения при попытке скопировать значения в указатель str - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь написать функцию с именем read_line () для получения данных из текстового файла построчно.После вызова функции строка будет записана в указатель str, и функция вернет длину строки.К сожалению, я все время получаю нулевое значение.

/* readline.c*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "readline.h"

int read_line(char *str)
{
    /* Open the file for reading */
    size_t line_buf_size = 0;
    ssize_t line_size;
    FILE *fp = fopen("0.txt", "r");
    if (!fp)
    {
        fprintf(stderr, "Error opening file '%s'\n", "0.txt");
        return EXIT_FAILURE;
    }

    /* Get the first line of the file. */
    line_size = getline(&str, &line_buf_size, fp);
    printf(str);
    return line_size - 2;
}

    /* main.c*/
#include "readline.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char *str = NULL;
    int num;
    num = read_line(str);
    printf("%s", str);
    printf("%d", num);
    return 0;
}

Ожидается: получить содержимое первой строки текстового файла.Факт: (ноль) 12

1 Ответ

1 голос
/ 01 апреля 2019

В main у вас есть объект с именем str типа char*.read_line принимает значение указателя в качестве параметра, но не изменяет сам указатель.Это означает, что независимо от того, что произойдет, значение str все равно будет NULL, когда оно достигнет printf s в main

Один из подходов состоит в передаче указателя на ваш объект-указательвместо его значения.

int read_line(char **str)
{
  ...
  /* Get the first line of the file. */
  line_size = getline(str, &line_buf_size, fp);
  printf("%s", *str);
  ...
}

Таким образом, str будет изменено на getline

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...