c的fprintf将垃圾写入文件末尾

时间:2014-06-05 09:16:14

标签: xml printf garbage

我正在研究一些遗留的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, " "));

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

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

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

通常,使用strncpy而不是strcpy是一种更好的策略。

正常执行他们的 表现方式相同。区别在于,在溢出情况下strncpy将保护您的其他变量并使用\0正确终止字符串,而strcpy将无法执行此操作,从而导致内存溢出和非终止字符串