c 的自定义 getLine() 函数

标签 c string getline

我需要一个函数/方法,它将接收一个字符数组并将其设置为从标准输入读取的字符串。它需要返回读取的最后一个字符作为其返回类型,因此我可以确定它是否到达了行尾或文件标记的末尾。

这是我目前所拥有的,我有点基于来自 here 的代码

更新:我更改了它,但现在它只是在输入文本后按回车键时崩溃。我知道这种方式效率低下,并且 char 不是 EOF 检查的最佳方式,但现在我只是想让它返回字符串。我需要它以这种方式而不是其他方式来做。我需要字符串是行的确切长度,并返回一个值,该值是换行符或 EOF int,我相信它仍然可以在 char 值中使用。

这个程序是用 C 写的,不是 C++

char getLine(char **line);

int main(int argc, char *argv[])
{
    char *line;
    char returnVal = 0;

    returnVal = getLine(&line);
    printf("%s", line);

    free(line);

    system("pause");
    return 0;
}

char getLine(char **line) {
    unsigned int lengthAdder = 1, counter = 0, size = 0;
    char charRead = 0;

    *line = malloc(lengthAdder);
    while((charRead = getc(stdin)) != EOF && charRead != '\n')
    {
        *line[counter++] = charRead;
        *line = realloc(*line, counter);
    }

    *line[counter] = '\0';

    return charRead;
}

提前感谢您的帮助!

最佳答案

您正在将 malloc() 的结果分配给 line 的本地副本,因此在 getLine() 函数返回后它是未修改(尽管您认为是)。您需要做的是返回它(而不是使用输出参数)或传递它的地址(“通过引用”传递):

void getLine(char **line)
{
    *line = malloc(length);

    // etc.
}

并这样调用它:

char *line;
getLine(&line);

关于c 的自定义 getLine() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657194/

相关文章:

c++ - c++读取文件省略换行符

linux - shell脚本创建变量并在文件中查找变量

c++ - 不用g++编译c代码的主要原因是什么?

c - 用指针交换数组索引函数

C编程十进制转二进制——递归方法中添加前导零

string - DartPad允许字符串迭代

java - 如何将Byte数组转换为整数,然后转换为字符串,以显示整数值?

在 c 中将字符数组转换为 uint32_t 数组——这是正确的方法吗?

java - 分割字符串不带分隔符

C++ 为什么 getline() 结束 while 循环?