如果puts()函数不遇到空字符会发生什么?

时间:2015-06-06 09:42:03

标签: c null puts

考虑以下计划。

#include <stdio.h>
int main(void)
{
    char side_a[] = "Side A";
    char dont[] = {'W', 'O', 'W', '!' }; 
    char side_b[] = "Side B";
    puts(dont); /* dont is not a string */
    return 0;
}

我知道puts()函数在遇到空字符时会停止。但在上面的程序中我没有指定null字符。那么什么时候停止打印?该程序是否调用未定义的行为?是否可以保证在各种C编译器上获得相同的输出? C标准对此有何看法?

3 个答案:

答案 0 :(得分:4)

puts将最终读取dont的最后一个元素,这是未定义的行为。

所以不,你不能保证每次都有相同的输出。您根本不保证任何输出 - 您不能保证任何,因为这是未定义的行为。

答案 1 :(得分:3)

是的,此错误导致您的程序没有定义的行为。正如该术语所表明的那样,你不能期望在执行这样一个程序时出现任何合理的事情。

答案 2 :(得分:2)

是的,它将是Undefined Behaviour,所以输出不会一直相同。 如果你想在这种情况下打印,我建议如下输出统一:

printf("%.*s", 4, dont);