Ошибка при чтении символов строки - C (СИ)
Формулировка задачи:
Связана ли данная ошибка с этим:
<
Имеется проблема, связанная с gets(), о которой следует знать: используя gets(), можно перейти границы массива, с которым она вызывалась. Это возможно, поскольку не существует способа указать gets(), где находится граница массива.
> Если же не с этим, тогда почему программа вылетает после ввода "perfomace"?#include <stdio.h> #include <malloc.h> #include <string.h> struct bd { char *model; char *perfomace; int price; }; struct format { char *resolutions; int freak; int memory; struct bd notefun; }; void main (void) { struct format *notebook; int i,n,m; char s[909]; printf ("Input size notebooks: "); scanf ("%d", &n); notebook=(format *)malloc(n*sizeof(format)); for (i=0; i<n; i++) { printf ("\nInput resolutions: "); scanf ("%d", &m); getchar (); gets (s); m=strlen(s); (notebook+i)->resolutions=(char*)malloc(m); strcpy((notebook+i)->resolutions,s); printf ("\nInput freak: "); scanf ("%d", &(notebook+i)->freak); printf ("\nInput memory: "); scanf ("%d", &(notebook+i)->memory); printf ("\nInput data notebook:"); printf ("\n model:"); getchar(); gets (s); m=strlen(s); (notebook+i)->notefun.model=(char*)malloc(m+1); strcpy((notebook+i)->notefun.model,s); printf ("\n perfomace:"); getchar(); gets (s); m=strlen(s); (notebook+i)->notefun.perfomace=(char*)malloc(m+1); strcpy((notebook+i)->notefun.perfomace,s); printf ("\n price:"); scanf ("%d", &(notebook+i)->notefun.price); } for (i=0; i<n; i++) { printf ("%s %d %d %s %s %d", i+1, (notebook+i)->resolutions,(notebook+i)->freak, (notebook+i)->memory, (notebook+i)->notefun.model, (notebook+i)->notefun.perfomace, (notebook+i)->notefun.price); } }
Решение задачи: «Ошибка при чтении символов строки»
textual
Листинг программы
printf ("%s %d %d %s %s %d", i+1,notebook[i]->resolutions, notebook[i]->freak, notebook[i]->memory,notebook[i]->notefun.model, notebook[i]->notefun.perfomace,notebook[i]->notefun.price);
Объяснение кода листинга программы
В данном коде используется функция printf для вывода информации о ноутбуках. Здесь есть несколько параметров, которые передаются в функцию printf:
%s
- это спецификатор формата, который указывает на то, что нужно вывести строку.i+1
- это выражение, которое вычисляет значение переменной i + 1 и передает его в функцию printf.notebook[i]->resolutions
- это значение поля resolutions из структуры notebook[i].notebook[i]->freak
- это значение поля freak из структуры notebook[i].notebook[i]->memory
- это значение поля memory из структуры notebook[i].notebook[i]->notefun.model
- это значение поля model из структуры notebook[i]->notefun.notebook[i]->notefun.perfomace
- это значение поля perfomace из структуры notebook[i]->notefun.notebook[i]->notefun.price
- это значение поля price из структуры notebook[i]->notefun. Таким образом, код выводит информацию о различных характеристиках ноутбуков.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д