Указатели, динамическое выделение памяти, работа с файлами. - C (СИ)

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

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

Здрасте всем! При запуске программа выдает ошибку, связанную, как я понял, с неправильным выделением памяти. Программа на Си. Вот код (сильно не ругайтесь, ибо я новичок в этом деле):
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int mass[255];
void Massiv(int*mass)
{
    int p,m,k;
    
mass=(int*)malloc(256*sizeof(int));
    FILE*Dan;
Dan=fopen("Dannue","r+b");
fseek(Dan,p*sizeof(char),SEEK_SET);
for(k=0;k<256;k++)
{
fscanf(Dan,"%d",mass[k]);
printf("%d",mass[k]);
}
puts("enter new element:\n");
scanf("%d",&m);
fseek(Dan,0,SEEK_END);
fprintf(Dan,"%d",m);
int d;
puts("enter the number of delete element:\n");
scanf("%d",&d);
delete((int*)mass[d]);
fclose(Dan);
int c=0;
int scetchik = 0;
while (mass[k]!= '\0')
{
    scetchik++;
}
for(k=1;k<256;k++)
{
    c+=mass[k];
}
c = c/scetchik;
printf("\nSumma=%d",c);
int y[256];
for(k=1;k<256;k++)
{
    if(mass[k]<5)
    {y[k]=(1-5*mass[k])-6;
    }
    if(mass[k]>=5&&mass[k]<=30)
    {y[k]=(mass[k]-5)/mass[k];
    }
    else
    {y[k]=10*mass[k]/3;
    }
    printf("\n\ny%d=%0.3lf",k+1,y[k]);
}
getch();
}

void main(void)
{char login[128],strPass[128];
int i,j, symbol;
 printf ("enter login:\n");
scanf("%s",&login);
printf ("password:\n");
scanf("&s",&strPass);
for(i=0;i<128;i++)
    {symbol=getch();
       if(symbol==13)
          {break;}
     strPass[i]=symbol;
     printf("*");
    }
FILE*Spis;
Spis=fopen("Spisok","r");
strrev(strPass);
char*Pass;
char str[256],pas[256];
int p;
for( i=0;i<256;i=i+2)
{
fscanf(Spis,"%s",str[i]);
char*strPtr=&str[i];
if(login!=strPtr)
{
    puts("error!!!");
break;
}
else
{
fscanf(Spis,"%s",pas[i+1]);
char*pasPtr=&pas[i+1];
if(Pass!=pasPtr)
{
    puts("error!!!");
break;
}
else
p=(i/2)+1;
 
Massiv(mass);
}
}
fclose(Spis);
getch();
}

Решение задачи: «Указатели, динамическое выделение памяти, работа с файлами.»

textual
Листинг программы
char*Pass;
char str[256],pas[256];
int p;
for( i=0;i<256;i=i+2)
{
fscanf(Spis,"%s",str[i]);
char*strPtr=&str[i];
if(login!=strPtr)
{
puts("error!!!");
break;
}
else
{
fscanf(Spis,"%s",pas[i+1]);
char*pasPtr=&pas[i+1];
if(Pass!=pasPtr)

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

  1. Объявлены три переменные:
    • char*Pass;
    • char str[256],pas[256];
    • int p;
  2. Задается цикл, который выполняется 256 раз (нечетные индексы).
  3. Внутри цикла происходит чтение строки из файла Spis с помощью функции fscanf().
    • Строка сохраняется в массив str с помощью оператора %s и указателя str[i].
    • Затем происходит проверка на то, что указатель strPtr указывает на только что прочитанную строку. Если это не так, то выводится сообщение об ошибке и цикл прерывается.
  4. Если цикл не был прерван, то происходит чтение следующей строки из файла Spis с помощью функции fscanf().
    • Строка сохраняется в массив pas с помощью оператора %s и указателя pas[i+1].
    • Затем происходит проверка на то, что указатель pasPtr указывает на только что прочитанную строку. Если это не так, то цикл прерывается.
  5. После завершения цикла, программа продолжает работу с переменными Pass, str и pas.

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


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

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

9   голосов , оценка 3.889 из 5
Похожие ответы