如果 puts() 函数没有遇到空字符会怎样?

what happens if puts() function doesn't encounter null character?

考虑以下程序。

#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() 函数在遇到空字符时停止。但是在上面的程序中我没有指定空字符。那么什么时候停止打印呢?这个程序是否调用了未定义的行为?是否保证该程序在各种 C 编译器上获得相同的输出? C 标准对此有何规定?

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

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

是的,此错误导致您的程序没有定义的行为。顾名思义,您不能指望执行此类程序会产生任何合理的结果。

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

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