以下代码在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;
}
#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 '?
左值与右值:
左值:就是变量的地址,或者是一个代表“对象在内存中的位置”的表达式。
右值:指变量或表达式的值。

浙公网安备 33010602011771号