Ошибка при чтении символов строки - 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:

  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
Похожие ответы