gpt4 book ai didi

c - 如何在c中的文本文件中获取空行?

转载 作者:行者123 更新时间:2023-11-30 16:39:43 25 4
gpt4 key购买 nike

我有一个文件,其中包含一些有关异常的数据。每个字节的数据都写入文本文件的新行中。现在为了分隔不同异常的数据,我在每个数据集的最后一个字节之后添加了一个空行,即“\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]);
}

那么如何检测该行是否为空行?

最佳答案

继续我的评论,所有面向行的输入函数(例如 fgets 和 POSIX getline)都会读取并包含'\n' 在它们填充的缓冲区中,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取消引用lineline[0]相同。您只是检查第一个字符。这是由于指针相当于索引。例如,指针表示法中的 line[x]*(line + x)。 (当x=0时,它只是*line)

另请注意,您应该通过包含 errno.h 并在每次转换后检查 errno 来验证 strtol 转换。您还应该将 strtol 的结果保存在 long 中以防止下溢/溢出,然后将 tmp0 进行比较和 UCHAR_MAX (在 limits.h 中找到),然后再分配给 data[counter++],例如

#include <errno.h>
#include <limits.h>
...

while ((read = getline(&line, &len, fp)) != -1)
{
long tmp;
if (*line == '\n') {
/* handle empty line */
}
errno = 0; /* reset errno to 0 */
tmp = strtol(line,NULL,16); /* convert to a long */
if (errno != 0) {
/* handle error */
}
if (0 <= tmp && tmp <= UCHAR_MAX) { /* check it will fit in unsigned char */
data[counter++] = (unsigned char)tmp;
printf("The data received is %08x\n\r", data[counter - 1]);
}
else
/* handle error - tmp too large for unsigned char */
}

仔细检查一下,如果您还有其他问题,请告诉我。

关于c - 如何在c中的文本文件中获取空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46946395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com