请问:一个字符串的问题
请看:char str;
strcpy(str,"Hello World");
printf("str=%s\n",str);
printf("str=%c %c %c %c %c\n",str,str,str,str{3],str,str);
我觉得很奇怪,char str定义只有一个字符,为什么
strcpy(str,"Hello World");不会出错?
另外:str只有定义一个字符,为什么
str,str,str,str{3],str,str也能输出?
系统难道不检查吗?这样写代码可以吗 尽管有一堆法律法规,可是红灯依然拦不住行人乱穿马路。
很大概率你不会被撞死。 回复 2# windoze
什么意思?能不能说说这些代码怎么回事
你把"Hello World"改得很长一般就会出错了 lea 0xffffffffffffffef(%rbp), %rax
movl $0x6c6c6568, (%rax) //lleh我的程序里是“hello world”,不是“Hello world”
movl $0x6f77206f, 0x4(%rax) //ow o
movl $0x646c72, 0x8(%rax)//dlr
lea 0xffffffffffffffef(%rbp), %rsi
mov $0x400668, %edi
mov $0x0, %eax
callq 400398 <printf@plt>
movzbl0xfffffffffffffff9(%rbp), %eax
movsbl%al, %edx
movzbl0xfffffffffffffff8(%rbp), %eax
movsbl%al, %ecx
movzbl0xfffffffffffffff7(%rbp), %eax
movsbl%al, %esi
movzbl0xfffffffffffffff6(%rbp), %eax
movsbl%al, %edi
movzbl0xfffffffffffffff5(%rbp), %eax
movsbl%al, %r8d
movzbl0xfffffffffffffff4(%rbp), %eax
movsbl%al, %r9d
movzbl0xfffffffffffffff3(%rbp), %eax
movsbl%al, %r10d
movzbl0xfffffffffffffff2(%rbp), %eax
movsbl%al, %r11d
movzbl0xfffffffffffffff1(%rbp), %eax
movsbl%al, %ebx
movzbl0xfffffffffffffff0(%rbp), %eax
movsbl%al, %r12d
movzbl0xffffffffffffffef(%rbp), %eax
movsbl%al, %eax
系统分配内存的时候,不是一个字节一个字节分配的。 你可以试一下2楼的做法,可能会得到崩溃的结果。
尽量不要这样用,在不同的环境下你可能得到的结果是不同的,这种不确定性要尽量在我们的程序中去避免。
页:
[1]