具有多个char数组问题的struct

时间:2010-12-04 16:24:19

标签: c arrays struct

为什么输出此代码

1234567890asdfg
asdfg

(我不能使用字符串类)

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

struct S
{
 char a[10];
 char b[20];
};

int main()
{
 struct S* test = (S*)malloc(sizeof(S));

 strcpy(test->a, "1234567890");
 strcpy(test->b, "asdfg");

 printf("%s\n%s", test->a, test->b);

 return 0;
}

2 个答案:

答案 0 :(得分:6)

您放入test->a的字符串长度为11个字符,包括终止空字符:1234567890\0。当您将其复制到a时,该空字符最终会出现在b的第一个字符中。然后使用复制到b的字符串覆盖它,以便在内存中有:

a - - - - - - - - - b - - - - - - - - - - - - - - - - - - -
1 2 3 4 5 6 7 8 9 0 a s d f g \0
                    ^
                    |
        a's terminating null was here.

然后打印a(从'1'开始)和b(从'a'开始),生成该输出。

答案 1 :(得分:2)

字符串"1234567890"实际上需要11个字节(char s)。

这样你就可以覆盖b的第一个字符。