Why is output of this code
1234567890asdfg
asdfg
(i can't use string class)
#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->开发者_StackOverflow中文版;a, test->b);
return 0;
}
The string you've put in test->a is eleven characters long including the terminating null character: 1234567890\0. When you copy it into a, that null character ends up in the first character of b. You then overwrite it with the string you copy into b, so that in memory you have:
a - - - - - - - - - b - - - - - - - - - - - - - - - - - - -
1 2 3 4 5 6 7 8 9 0 a s d f g \0
^
|
a's terminating null was here.
You then print a (starting from the '1'), and b (starting from the 'a'), producing that output.
The string "1234567890" actually needs 11 byte (chars).
So that you overwrite the first character of b.
加载中,请稍侯......
精彩评论