我想从带有函数原型(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/