如何编写 getLine 函数使用 getc
how to write getLine function uses getc
我想使用函数原型从 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 = '[==]';
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 = '[=14=]';
return 1;
}
您必须传递一个预先分配的缓冲区,它的大小可以防止您尝试添加超过缓冲区末尾的字符。
调用我写的函数需要
char strName[30];
而不是
char* strName;
所以缓冲区需要预先分配...
并通过
调用
getLine(fp,strName);
而 fp 是文件*
int getLine(FILE* ptr,char* buffer){
int c;
while (((c = getc(ptr)) != EOF) && (c != '\n')){
*buffer++ = c;
}
*buffer = '[=11=]';
return 1;
}
我想使用函数原型从 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 = '[==]';
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 = '[=14=]';
return 1;
}
您必须传递一个预先分配的缓冲区,它的大小可以防止您尝试添加超过缓冲区末尾的字符。
调用我写的函数需要
char strName[30];
而不是
char* strName;
所以缓冲区需要预先分配... 并通过
调用getLine(fp,strName);
而 fp 是文件*
int getLine(FILE* ptr,char* buffer){
int c;
while (((c = getc(ptr)) != EOF) && (c != '\n')){
*buffer++ = c;
}
*buffer = '[=11=]';
return 1;
}