如果 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);
考虑以下程序。
#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);