我有一个文件,其中包含一些有关异常的数据。每个数据字节都以新行写入文本文件中。现在要分离不同异常的数据,我添加了一个空行,即" \ n"在每个数据集的最后一个字节之后。我正在使用这个功能:
while ((read = getline(&line, &len, fp)) != -1)
{
data[counter++] = (unsigned char)strtol(line,NULL,16);
printf("The data received is %08x\n\r", data[counter - 1]);
}
那么如何检测该行是否为空行?
答案 0 :(得分:0)
继续我的评论,所有面向行的输入函数(例如fgets
和POSIX getline
)读取并包含'\n'
in他们填充的缓冲区,line
。因此,要检查您是否遇到(或读取)空行,您只需要检查line
的内容是否为'\n'
。要获得line
中的第一个字符,您需要做的就是取消引用它,例如*line
并将第一个字符与'\n'
字符进行比较,例如
while ((read = getline(&line, &len, fp)) != -1)
{
if (*line == '\n') {
/* handle empty line */
}
data[counter++] = (unsigned char)strtol(line,NULL,16);
printf("The data received is %08x\n\r", data[counter - 1]);
}
注意 line
取消*line
与line[0]
相同。你只是检查第一个字符。这是由于指针等效于索引。例如,指针表示法中的line[x]
为*(line + x)
。 (x=0
时,它只是*line
)
另请注意,您应通过在每次转化后加入strtol
并检查errno.h
来验证errno
转化。您还应该将strtol
的结果保存在long
中以防止欠/溢出,然后将tmp
与0
和UCHAR_MAX
进行比较(在{{1}中找到在分配给limits.h
之前,例如
data[counter++]
仔细看看,如果您有其他问题,请告诉我。