Ошибка при чтении символов строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Связана ли данная ошибка с этим: <

Имеется проблема, связанная с gets(), о которой следует знать: используя gets(), можно перейти границы массива, с которым она вызывалась. Это возможно, поскольку не существует способа указать gets(), где находится граница массива.

> Если же не с этим, тогда почему программа вылетает после ввода "perfomace"?
Листинг программы
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4. struct bd
  5. {
  6. char *model;
  7. char *perfomace;
  8. int price;
  9. };
  10. struct format
  11. { char *resolutions;
  12. int freak;
  13. int memory;
  14. struct bd notefun;
  15. };
  16. void main (void)
  17. {
  18. struct format *notebook;
  19. int i,n,m;
  20. char s[909];
  21. printf ("Input size notebooks: ");
  22. scanf ("%d", &n);
  23. notebook=(format *)malloc(n*sizeof(format));
  24. for (i=0; i<n; i++)
  25. {
  26. printf ("\nInput resolutions: ");
  27. scanf ("%d", &m);
  28. getchar ();
  29. gets (s);
  30. m=strlen(s);
  31. (notebook+i)->resolutions=(char*)malloc(m);
  32. strcpy((notebook+i)->resolutions,s);
  33. printf ("\nInput freak: ");
  34. scanf ("%d", &(notebook+i)->freak);
  35. printf ("\nInput memory: ");
  36. scanf ("%d", &(notebook+i)->memory);
  37. printf ("\nInput data notebook:");
  38. printf ("\n model:");
  39. getchar();
  40. gets (s);
  41. m=strlen(s);
  42. (notebook+i)->notefun.model=(char*)malloc(m+1);
  43. strcpy((notebook+i)->notefun.model,s);
  44. printf ("\n perfomace:");
  45. getchar();
  46. gets (s);
  47. m=strlen(s);
  48. (notebook+i)->notefun.perfomace=(char*)malloc(m+1);
  49. strcpy((notebook+i)->notefun.perfomace,s);
  50. printf ("\n price:");
  51. scanf ("%d", &(notebook+i)->notefun.price);
  52. }
  53. for (i=0; i<n; i++)
  54. {
  55. printf ("%s %d %d %s %s %d", i+1, (notebook+i)->resolutions,(notebook+i)->freak, (notebook+i)->memory, (notebook+i)->notefun.model,
  56. (notebook+i)->notefun.perfomace, (notebook+i)->notefun.price);
  57. }
  58. }

Решение задачи: «Ошибка при чтении символов строки»

textual
Листинг программы
  1. printf ("%s %d %d %s %s %d", i+1,notebook[i]->resolutions, notebook[i]->freak, notebook[i]->memory,notebook[i]->notefun.model,
  2. notebook[i]->notefun.perfomace,notebook[i]->notefun.price);

Объяснение кода листинга программы

В данном коде используется функция printf для вывода информации о ноутбуках. Здесь есть несколько параметров, которые передаются в функцию printf:

  1. %s - это спецификатор формата, который указывает на то, что нужно вывести строку.
  2. i+1 - это выражение, которое вычисляет значение переменной i + 1 и передает его в функцию printf.
  3. notebook[i]->resolutions - это значение поля resolutions из структуры notebook[i].
  4. notebook[i]->freak - это значение поля freak из структуры notebook[i].
  5. notebook[i]->memory - это значение поля memory из структуры notebook[i].
  6. notebook[i]->notefun.model - это значение поля model из структуры notebook[i]->notefun.
  7. notebook[i]->notefun.perfomace - это значение поля perfomace из структуры notebook[i]->notefun.
  8. notebook[i]->notefun.price - это значение поля price из структуры notebook[i]->notefun. Таким образом, код выводит информацию о различных характеристиках ноутбуков.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы