struct DVDInfo *ReadStruct(void) {
struct DVDInfo *infoPtr;
int num;
char line[ kMaxLineLength ];
char *result;
infoPtr = malloc(sizeof(struct DVDInfo));
if (NULL == infoPtr) {
printf("Out of memory!!! Goodbye!\n");
exit(0);
}
printf("Enter DVD Title: ");
result = fgets(line, kMaxLineLength, stdin);
line[ strlen(line) - 1 ] = '\0';
infoPtr->title = MallocAndCopy(line);
printf("Enter DVD comment: ");
result = fgets(line, kMaxLineLength, stdin);
line[ strlen(line) - 1 ] = '\0';
infoPtr->comment = MallocAndCopy(line);
do {
printf("Enter DVD Rating (1-10): ");
scanf("%d", &num);
Flush();
}
while ((num < 1) || (num > 10));
infoPtr->rating = num;
printf("\n----------\n");
return(infoPtr);
}
Tôi đã hỏi một câu hỏi khác về mã này trong một luồng khác trên stackoverflow nhưng không muốn nhân đôi trên đó - tại sao điểm cuối không được thêm vào cuối các tệp này được đọc bởi fgets? fgets cho biết thêm các chấm dứt zero anyway, không phải là overkill này?fgets tự nhiên đặt một số không kết thúc trong C?
C đã đủ đệm tràn ngập cơ hội như nó được. Người ta nên cổ vũ khi chức năng dành thời gian để đảm bảo một chuỗi được chấm dứt một cách chính xác. (Một chuỗi trong C * phải * chấm dứt với một NUL là một chuỗi hợp lệ, theo định nghĩa trong C.) –
Vâng, nó quá mức cần thiết. –