我正在研究一些遗留的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, " "));
提前致谢。
答案 0 :(得分:0)
您可以尝试:
strncpy(first,strtok(name, " "),50);
strncpy(last,strtok(NULL, " "),50);
如果由于某种原因,\0
不包含name
,则会处理\0
以50个字符。
通常,使用strncpy
而不是strcpy
是一种更好的策略。
正常执行他们的
表现方式相同。区别在于,在溢出情况下strncpy
将保护您的其他变量并使用\0
正确终止字符串,而strcpy
将无法执行此操作,从而导致内存溢出和非终止字符串