структура с проблемой нескольких массивов символов - PullRequest
1 голос
/ 04 декабря 2010

Почему вывод этого кода

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 ]

6 голосов
/ 04 декабря 2010

Введенная вами строка test->a имеет длину одиннадцать символов, включая завершающий нулевой символ: 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'), производя этот вывод.

2 голосов
/ 04 декабря 2010

Строка "1234567890" фактически требует 11 байт (char с).

Чтобы вы перезаписали первый символ b.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...