I come, I see, I conquer

                    —Gaius Julius Caesar

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

以下代码在VC环境下运行成功:

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

main(
void)
{
    
char chars1[]="ABC";

    
char chars2[]={'A''B''C'};

    
/*compile-time error*/
    
//char name[1];  name="Jim"; // Turbo C: Lvalue required in function main
                                  
// VC++: cannot convert from 'char [4]' to 'char [10]'

    
/*correct way*/
    
char name[1];    strcpy(name, "Jim");
    
char address[4]; strcpy(address, chars2); // strcpy函数根据'\0'判断字符串是否复制完毕

    printf(
"%d bytes \n"sizeof(chars1)); // 4 bytes
    printf("%d bytes \n"sizeof(chars2)); // 3 bytes

    printf(
"%s \n", chars1); //ABC
    printf("%s \n", chars2); //ABC藺BC ?

    printf(
"%s \n", name); //ABC
    printf("%c \n", name[2]); //C ?
    printf("%s \n", address); //ABC藺BC ?

    
return 0;
}

 

对上述代码在VC环境下调试发现,执行完语句char address[4]; strcpy(address, chars2);后,内存内容如下所示:

Memory

0012FF66  CC CC CC CC CC CC CC CC CC CC 41  烫烫烫烫烫A
0012FF71  42 43 CC  41 42  43 00 41  42 43 CC  BC藺BC.ABC.
0012FF7C  41 42 43  00 C0  FF 12  00 49 11  40  ABC.....I.@

Name     Address     Value

+ chars1 0x0012ff7c "ABC"
 [0] 65 'A'
 [1] 66 'B'
 [2] 67 'C'
 [3] 0 ''
+ chars2 0x0012ff78 "ABC藺BC"
 [0] 65 'A'
 [1] 66 'B'
 [2] 67 'C'
+ name 0x0012ff74 "ABC"
 [0] 65 'A'
+ address 0x0012ff70 "ABC藺BC"
 [0] 65 'A'
 [1] 66 'B'
 [2] 67 'C'
 [3] -52 '?

 

左值与右值:

左值:就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式。
右值:指变量或表达式的值。

posted on 2008-01-26 19:18  jcsu  阅读(501)  评论(0)    收藏  举报