我想从带有函数原型
的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;
}
分段错误(核心转储)
答案 0 :(得分:2)
下面
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;
}
你必须传递一个预先分配的缓冲区,并且它的大小使你不会试图在缓冲区的末尾添加字符。
答案 1 :(得分:0)
用于调用我编写的函数需要
char strName [30];
而不是
char * strName;
所以缓冲区需要预先分配... 并通过
进行呼叫getLine(fp,strName);
而fp是FILE *
int getLine(FILE* ptr,char* buffer){
int c;
while (((c = getc(ptr)) != EOF) && (c != '\n')){
*buffer++ = c;
}
*buffer = '\0';
return 1;
}