c++ - 如何使用getc编写getLine函数

标签 c++ c visual-c++

我想从带有函数原型(prototype)的txt文件中获取行

int getLine(FILE* ptr,char* buffer);

但是我有一个堆栈问题...

int getLine(FILE* ptr,char* buffer){
int c;
while ( c = getc(ptr) != EOF && c != '\n'){
    *buffer++ = c;
    }
*buffer = '\0';
return 1;
}

段错误(核心转储)

最佳答案

这里

c = getc(file) != EOF

您正在分配比较结果

getc(file) != EOF

c,就像你这样做一样

c = (getc(file) != EOF)

所以你应该添加括号,因为 operator precedence ,所以更正后的代码为

while ((c = getc(ptr)) != EOF && c != '\n')

您还应该确保不会写入过去传递给函数的 char *buffer ,因此传递它的大小,然后迭代,直到找到 '\n' 或直到没有更多空间为止。

我建议

int getLine(FILE* file, char* buffer, size_t size)
{
    int    c;
    size_t count;
    if (buffer == NULL)
        return 0;
    while ((size < count - 1) && ((c = getc(file)) != EOF) && (c != '\n'))
    {
        *buffer++ = (char)c;
        count++;
    }
    *buffer = '\0';
    return 1;
}

您必须传递一个预先分配的缓冲区及其大小,以便防止尝试在缓冲区末尾添加字符。

关于c++ - 如何使用getc编写getLine函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27800804/

相关文章:

c - 如何编译/创建使用 c 的 ruby​​ 扩展?

windows - 如何编辑 MFC 列表框中的单元格?

c++ - 为什么这比 memcmp 慢

c++ - 服务器程序处于无限循环中。如何检查?

c++ - node.js native 插件 - 包装类的析构函数不运行

c++ - VSS 硬件供应商

c - 使用 malloc() 函数设置全局数组大小获取转储核心

c++ - 在 Visual Studio 2010 中编译 gloox 库项目时遇到问题

c - 如何以及在何处将 stdint.h 类型定义包含在头文件中?

c++ - 在 Visual C++ 中链接 libboost_system 时出错