无法从c中读取文件中的字符串

时间:2013-02-25 15:11:44

标签: c fopen scanf

我正在尝试逐行读取文本文件并打印前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

2 个答案:

答案 0 :(得分: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)       

答案 1 :(得分:1)

由于,输出无法"00:07:80:4c:0E:EE" 由于缓冲区,这将导致未定义的行为 溢出 - 字符串需要18个字节,但您只提供 17.如果没有"%s",您永远不会我们fscanf 指定长度。

您在阅读后在fscanf上呼叫devices 它的一条线;如果你是逐行阅读,你想使用 你读过这行的sscanf