netdoger 发表于 2016-06-20 15:31

请问:一个字符串的问题

请看:
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也能输出?
系统难道不检查吗?这样写代码可以吗

windoze 发表于 2016-06-20 15:38

尽管有一堆法律法规,可是红灯依然拦不住行人乱穿马路。
很大概率你不会被撞死。

netdoger 发表于 2016-06-20 16:06

回复 2# windoze
什么意思?能不能说说这些代码怎么回事

   

hellioncu 发表于 2016-06-20 16:46

你把"Hello World"改得很长一般就会出错了

残愚 发表于 2016-06-21 09:14

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

cjfeii 发表于 2016-07-22 16:40

系统分配内存的时候,不是一个字节一个字节分配的。

cjfeii 发表于 2016-07-24 10:10

你可以试一下2楼的做法,可能会得到崩溃的结果。
尽量不要这样用,在不同的环境下你可能得到的结果是不同的,这种不确定性要尽量在我们的程序中去避免。
页: [1]
查看完整版本: 请问:一个字符串的问题