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