代码之家  ›  专栏  ›  技术社区  ›  SamuelNLP

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

  •  0
  • SamuelNLP  · 技术社区  · 13 年前

    我正在尝试逐行读取文本文件,并打印前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 回复  |  直到 13 年前
        1
  •  3
  •   Mark Wilkins    13 年前

    这个 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)       
    
        2
  •  1
  •   James Kanze    13 年前

    输出是不可能的 "00:07:80:4c:0E:EE" 自从 由于缓冲区的原因,这将导致未定义的行为 溢出字符串需要18个字节,但您只提供 17.你应该 从不 我们 "%s" 在 fscanf 没有 指定长度。

    你在打电话 fscanf公司 在…上 devices 阅读后 它的一行;如果你逐行阅读,你想使用 sscanf 在你读过的那行。