Ошибка при чтении символов строки - 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. Таким образом, код выводит информацию о различных характеристиках ноутбуков.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д