【问题标题】:Getting null when trying to copy values to pointer str尝试将值复制到指针 str 时获取 null
【发布时间】:2019-04-01 16:41:16
【问题描述】:

我正在尝试编写一个名为 read_line() 的函数来逐行从文本文件中获取数据。调用该函数后,该行将被写入 str 指针,该函数将返回该行的长度。不幸的是,我最终总是得到 null。

/* 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;
}

预期:获取文本文件第一行的内容。 实际:(null)12

【问题讨论】:

  • 创建时名为str 的指针为NULL,并且您没有将它传递给任何可以更改它的函数,因此当您尝试将它与printf 一起使用时它将为NULL .也许您需要将指向str 的指针传递给getline,而不是复制指针。

标签: c linux


【解决方案1】:

main 中,您有一个名为str 的对象,类型为char*read_line 将指针的值作为参数,但不修改指针本身。这意味着无论发生什么情况,str 的值在到达main 中的printfs 时仍然是NULL

一种方法是将指针传递给您的指针对象,而不是它的值。

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修改

【讨论】:

    猜你喜欢
    • 2016-02-18
    • 2020-06-05
    • 1970-01-01
    • 2021-05-09
    • 2012-09-08
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多