12位字符串逆序输出带奇怪方框

在使用ubuntu 10.04完成课程布置的实验的时候,在bash下,使用vi编辑了一个.c文件,通过gcc -o命令实现编译,然后直接执行.out文件实现将
Hello world!(共12个字符)
逆序输出。
在输出之后的结果如下图所示:

img


我又尝试输入大于12位的字符串,没有出现后面的方框:

img


输入小于12位的字符串,没有方框出现:

img


输入其他内容的12位字符串,有方框出现:

img

特别好奇12这个数字和linux或者ubuntu有什么奇怪的联系吗
源码:

img

这个内容有点跑偏了,实际上是C语言的问题。
我在c的编译器上跑这段代码,是只要超过12位字符后面会跟着乱码。至于为什么在ubuntu上对c进行编译后,大于12个字符的逆序输出后面就没有乱码,这里就不清楚了。
将上面的源码改成

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print1(char *string){
 printf("The string is %s\n",string);
}
void print2(char *string){
 int len=strlen(string);
 char *str=(char *)malloc(sizeof(char)*(len+1));
 int i=0;
 while(i<len){
    str[i]=string[len-i-1];
    i++;
 }
 str[i]='\0';
 printf("The string is %s\n",str);
}
void main(){
 char *string="hello world!";
 print1(string);
 print2(string);
}

主要是C语言字符数组末尾的'\0'没有给逆转完后的字符串添上,导致这样的问题。需要自己多加深理解。

源码呢?