0
В конце программы мой массив печатает правильно, а затем программа segfaults. Зачем?Программа выполняется правильно, затем segfaults
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main(int argc, char *argv[]) {
FILE *file = fopen(argv[1], "r");
struct item{
char type[9];
int price;
bool wanted;
};
item items[20]; char temp[8];
for (char i = 0; i < 100; i++)
{
if (fscanf(file,
"%[^,], %[^,], %d",
items[i].type,
temp,
&items[i].price) != 3)
break;
else if (!strcmp(temp, "for sale"))
items[i].wanted = false;
else if (!strcmp(temp, "wanted"))
items[i].wanted = true;
else
cout << "aaaagghghghghhhh!!!" << endl;
}
for (char i = 0; i < 100; i++)
{
cout << items[i].type << endl;
cout << items[i].price << endl;
cout << items[i].wanted << endl;
}
}
OH MY GOSH У меня было это для отладки и забыл изменить его! Agghghgh! Это моя первая программа на C++, полученная с фона Haskell/Python, где IT РАССКАЗИТ ВАС, ЕСЛИ ВЫ ВЫХОДИТЕ ИЗ БОЛОНОВ, так жаль. Почему это вызывает segfault tho? Разве он не должен просто перезаписывать все, что прошло мимо отметки 20? –
@ RenéG Переполнение массивов приводит к неопределенному поведению. См. Мой ответ: я его отредактировал. –