楼主的程序大家还是少运行为妙,随便改变未知存储单元的内容,这种风险太大.
至于楼上的,您的程序只是访问未知单元,但并未对其处理,风险不大。程序显示的之所以是乱码,是因为访问到了未知的单元,单元存储的8bit刚好是10011000,打印出其ASCii码对应的刚好是那个.
您运行的每次结果都是一样的,那是因为:编译器为那个字符串分配空间的位置跟上次程序是一样的(因为每执行完程序,字符串空间被释放),也就是说每次字符串的地址都是一样的。
可做如下检验:
#include<stdio.h>
main()
{
char str[20]="sdjhffdfdhfd";
printf("%x\n",str);
printf("%c",str[21]);
}
经运行,可知每次运行得到的地址都是一样的。
#include<stdio.h>
#include<string.h>
int main()
{
int x = 10;
char c[10];
printf("%d\n", strlen( c ) );
strcpy( c, "1234567890987" );
printf("%d\n", x);
return 0;
}
此程序中strlen( c ) 计算的是字符串的长度,而char c[10];定义的是一个字符数组!故输出将有错!
将程序改为:
#include<stdio.h>
#include<string.h>
int main()
{
int x = 10;
char *c;
c="adljdfgdfgf";
printf("%d\n", strlen( c ) );
strcpy( c, "1234567890987" );
printf("%d\n", x);
return 0;
}
所求长度将是c="adljdfgdfgf";所给的具体长度!