Невозможно передать аргумент - C (СИ)

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

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

как передать аргумент в функцию в описании которой переменная с * ?
#include <stdio.h>
#define N 100
char arr[N];
int sc_memoryInit();
int sc_memoryGet(int address,int  *value);
int sc_memorySave(char *filename);
int sc_memorySet(int address,int value);
int sc_memoryInit()
{
    int i;
    for (i = 0; i<N;i++);
    arr[i] = 0;
    return 0;
}
int sc_memorySet(int address,int value)
{
    if (address<N)
        arr[address]=value;
    else
        printf("out of memory\n");
    return 0;   
}
int sc_memoryGet(int address,int * value)
{
    if (address<N)
        *value=arr[address];
    else
        printf("out of memory\n");
    return 0;
 
}
int sc_memorySave(char  *filename)
{
    FILE *file1;
    file1=fopen(filename,"w");
    fwrite(arr,sizeof(arr),1,file1);
    fclose(file1);
    return 0;
 
}
void main(void)
{
    int i, charger=21;
    char c='file';
    sc_memorySet(7 , 3);
    sc_memoryGet(5,charger);
    sc_memorySave(c);
    for (i = 0; i<N; i++)
        printf("%d", arr[i]);
    printf("\n %d\n", charger);
 
}

Решение задачи: «Невозможно передать аргумент»

textual
Листинг программы
#include <stdio.h>
#define N 100
char arr[N];
int sc_memoryInit();
int sc_memoryGet(int address,int  *value);
int sc_memorySave(char *filename);
int sc_memorySet(int address,int value);
int sc_memoryInit()
{
    int i;
    for (i = 0; i<N;i++);
    arr[i] = 0;
    return 0;
}
int sc_memorySet(int address,int value)
{
    if (address<N)
        arr[address]=value;
    else
        printf("out of memory\n");
    return 0;   
}
int sc_memoryGet(int address,int * value)
{
    if (address<N)
        *value=arr[address];
    else
        printf("out of memory\n");
    return 0;
 
}
int sc_memorySave(char  *filename)
{
    FILE *file1;
    file1=fopen(filename,"rb");
    fwrite(arr,sizeof(arr),1,file1);
    fclose(file1);
    return 0;
 
}
void main(void)
{
    int i, charger=21;
    char *c="file.txt";
    sc_memorySet(7 , 3);
    sc_memoryGet(7,&charger);
    sc_memorySave(c);
    for (i = 0; i<N; i++)
        printf("%d", arr[i]);
    printf("\n %d\n", charger);
 
}

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

  1. Объявлены массив arr размером N и функция sc_memoryInit().
  2. В функции sc_memoryInit() происходит инициализация массива arr нулями.
  3. В функции sc_memorySet() можно установить значение arr[address] равным value, но только если address меньше N. Если это условие не выполняется, выводится сообщение out of memory и значение не устанавливается.
  4. В функции sc_memoryGet() можно получить значение arr[address] и сохранить его в *value, но только если address меньше N. Если это условие не выполняется, выводится сообщение out of memory и функция возвращает значение не равное arr[address].
  5. В функции sc_memorySave() открывается файл с именем filename, в который записывается массив arr.
  6. В функции main() объявлены переменные i, charger и c.
  7. В main() вызываются функции sc_memorySet(), sc_memoryGet(), sc_memorySave() и выполняется цикл, в котором выводятся значения arr[i].
  8. Вызов функции sc_memorySave(c) должен записать массив arr в файл file.txt, но возможно он не имеет разрешения на запись в файл или файл уже существует и его содержимое перезаписывается.
  9. Если файл file.txt существует и его содержимое не пусто, то при вызове функции main() в нем будут записаны значения массива arr.
  10. Если файл file.txt не существует или его содержимое пусто, то при вызове функции main() в нем будет записан массив arr.

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

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