проблема с структурой в C - PullRequest
       10

проблема с структурой в C

0 голосов
/ 06 сентября 2018

Содержимое course.Code до и после strcpy (course.Name, b) имеет значение «This» и «Thisis», что похоже на то, что strcpy () также объединяет содержимое b с course.Code

typedef struct {
    char Code[4];
    char Name[2];
}Course;

int main() {
    char str[7] = "This is";
    char a[4], b[2];
    Course course;
    sscanf(str, "%s %s", a, b);
    strcpy(course.Code, a);
    printf( "%s\n", course.Code );
    strcpy(course.Name, b);
    printf( "%s\n", course.Code );
   return(0);
}

1 Ответ

0 голосов
/ 06 сентября 2018

Вам нужно пять символов для хранения «This» и три символа для «is», потому что каждая строка заканчивается нулем. (Бонусный балл: вам нужно восемь, чтобы хранить «Это»)

Необработанная память в course будет выглядеть следующим образом:

Code[0] 'T'
Code[1] 'h'
Code[2] 'i'
Code[3] 's'
Name[0] 'i'
Name[1] 's'

Поскольку на course.Code нет конечного нуля, printf продолжит печать. Он не может знать, что вы хотели, чтобы он остановился после четырех символов. Тот факт, что вы не получили нечитаемый мусор после «Thisis», во многом зависит от удачи и / или настроек компилятора.

...