在使用ubuntu 10.04完成课程布置的实验的时候,在bash下,使用vi编辑了一个.c文件,通过gcc -o命令实现编译,然后直接执行.out文件实现将
Hello world!(共12个字符)
逆序输出。
在输出之后的结果如下图所示:
我又尝试输入大于12位的字符串,没有出现后面的方框:
输入小于12位的字符串,没有方框出现:
输入其他内容的12位字符串,有方框出现:
特别好奇12这个数字和linux或者ubuntu有什么奇怪的联系吗
源码:
在使用ubuntu 10.04完成课程布置的实验的时候,在bash下,使用vi编辑了一个.c文件,通过gcc -o命令实现编译,然后直接执行.out文件实现将
Hello world!(共12个字符)
逆序输出。
在输出之后的结果如下图所示:
特别好奇12这个数字和linux或者ubuntu有什么奇怪的联系吗
源码:
这个内容有点跑偏了,实际上是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'没有给逆转完后的字符串添上,导致这样的问题。需要自己多加深理解。