我试图编写一个删除C中其余部分的函数。我传入一个char数组和一个文件指针(从中读取char数组)。数组中只有80个字符,如果数组中没有换行符,则读取(并丢弃)文件中的字符,直到找到它(换行符)。这是我到目前为止所做的,但它似乎没有起作用,而且我不确定我做错了什么。任何帮助将不胜感激!这是关于函数应该做什么的给定信息:
discardRest - 如果fgets没有读取换行符而不读取整行。此函数将最近读取的行和指向正在读取的文件的指针作为输入。 discardRest在输入行中查找换行符。如果换行符不在行中,则该函数会读取(并丢弃)文件中的字符,直到读取换行符。这将导致文件指针定位到输入文件中下一行的开头。
以下是代码:
void discardRest(char line[], FILE* file)
{
bool newlineFound = FALSE;
int i;
for(i = 0; i < sizeof(line); i++)
{
if(line[i] == '\n') newlineFound = TRUE;
}
if(!newlineFound)
{
int c = getc(file);
while(c != '\n')
{
c = getc(file);
}
}
}
答案 0 :(得分:0)
你的方式太难了,除了sizeof
总是给出其操作数的大小,这是一个指针,而不是它指向你认为它的数组。
fgets
有以下合同:
NULL
:某种错误,请勿使用缓冲区,其内容可能不确定。'\n'
。因此,这应该有效:
strlen()
来获取缓冲区长度。(length && [length-1] == '\n')
。