【问题标题】:c's fprintf writes garbage to the end of filec的fprintf将垃圾写入文件末尾
【发布时间】:2014-06-05 09:16:14
【问题描述】:

我正在开发一些遗留的 C 程序。它是一些 20 年前的 C 版本,以及一些旧的 Unix OS(我不熟悉确切的版本)。无论如何,我需要编写一个 xml 文件,所以我在我的 Ubuntu 机器上编写了程序,当我在那个旧系统上启动它时,我的 xml 末尾有一些垃圾,它看起来像一个矩形,类似于:

0 0 
1 A

问题是我无法在 Ubuntu 上重现它,可能较新的 C 可以处理这种情况。我的猜测是问题与字符串终止字符\0 有关。我只是不确定它发生在哪里,所以我希望明天有尽可能多的想法,当我到达那里修复它时。 最后,我的问题是,您认为问题可能是换行符\n,最后是fprintf? 或者,可能是以下问题:

char name[50]; //this is read from file at some point
char first[50];
char last[50];
strcpy(first,strtok(name, " "));
strcpy(last,strtok(NULL, " "));

提前致谢。

【问题讨论】:

    标签: xml printf garbage


    【解决方案1】:

    你可以试试:

    strncpy(first,strtok(name, " "),50);
    strncpy(last,strtok(NULL, " "),50);
    

    如果由于某种原因name 不包含\0,这将处理\0 50 个字符。

    通常使用strncpy 比使用strcpy 更好。

    在正常执行中 行为方式相同。不同之处在于,在溢出情况下strncpy 将保护您的其他变量并使用\0 正确终止字符串,而strcpy 将无法这样做,从而导致内存溢出和非终止字符串。

    【讨论】:

    • 好的,谢谢,我会尽力告诉你发生了什么。
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多