0

我正在尝试逐行读取文本文件并打印前 17 个字符。

FILE *devices;
devices = NULL;
devices = fopen("devices.txt", "r");

char deviceaddr[17];
char addr[17];

char line[1024];

while (fgets(line,1024,devices) != NULL)
{
    fscanf(devices,"%s", deviceaddr);

    printf("%s\n", deviceaddr);
}

fclose(devices);

输出应该是00:07:80:4C:0E:EE第一行,但它给出了6.

4

2 回答 2

3

while循环正在读取一行文本,然后将fscanf读取下一组文本(并且可能偶然超出该缓冲区)。似乎您应该只是从缓冲区中的循环内打印所需的数据line

例如,假设有三行文本。

00:07:80:4C:0E:EE    --> ends up line buffer line
second               --> ends up in deviceaddr
third line           --> ends up in line (unless the fscanf did not consume newline)       
于 2013-02-25T15:15:20.340 回答
1

输出不可能是"00:07:80:4c:0E:EE",因为由于缓冲区溢出,这将导致未定义的行为 - 字符串需要 18 个字节,但您只提供 17 个字节。您不应该未指定长度"%s"的情况下使用。fscanf

你在读了一行之后就打电话fscanf了;devices如果您正在逐行阅读,则要 sscanf在已阅读的行上使用。

于 2013-02-25T15:17:46.270 回答