代码在c中给出意外输出

Rac*_*hit 2 c

以下代码片段在Turbo C++编译器中提供了意外输出:

     char a[]={'a','b','c'};
     printf("%s",a);
Run Code Online (Sandbox Code Playgroud)

为什么不打印abc?根据我的理解,字符串在C中实现为一维字符数组.
其次,字符串%s%2s?之间的区别是什么?

das*_*ght 5

这是因为您的字符串不是以零结尾的.这将有效:

char a[]={'a','b','c', '\0'};
Run Code Online (Sandbox Code Playgroud)

%2s指定打印输出的最小宽度.由于您要打印3个字符的字符串,因此将被忽略.%5s但是,如果您使用了,则您的字符串将在左侧填充两个空格.