Переменные перемешиваются
Я только недавно начал изучать C и написал код, но после какого-то момента переменные просто перемешиваются. Почему так происходит?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string.h>
void save_file(char name[], int a, int b)
{
int c = a + b;
FILE *file;
char filename[150];
sprintf(filename, "C:\\Users\\user\\Desktop\\result.txt");
file = fopen(filename, "w+");
fprintf(file, "Your name is %s;\n%d + %d = %d;", name, a, b, c);
}
int main()
{
srand(time(0));
char name[] = "";
char save[] = "";
int a = rand() % 251;
int b = rand() % 251;
printf("Enter your name:\n> ");
scanf("%s", name);
printf("Hello, %s!\n", name);
printf("Save file? (y/n)\n> ");
scanf("%s", save);
if (strcmp(save, "y") == 0)
{
save_file(name, a, b);
}
return 0;
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Для всех переменных выделяется фактическое место хранение и фиксированный размер выделенной памяти. Вы выделили строкам всего по одному байту. И пытаетесь что-то поверх записать.
char name[] = "";
char save[] = "";
scanf("%s", name);
Просто-так увеличится размер не может и вы записываете, портя память других переменных.
Для массивов нужно выделить память побольше и при считывания с консоли нужно указывать лимит байт, чтобы и функция scanf никакую память сама не испортила.
char name[256] = "";
char save[256] = "";
scanf("%255s", name);
II. В функции save_file вы не закрыли файловый буфер и файл не запишется. Нужно вызывать fclose.
fclose(file);