Я пытаюсь сохранить строку в переменной char, используя sprintf.Код компилируется, но когда я его запускаю, я получаю ошибку переполнения буфера стека.Мой компилятор дает мне информацию о том, почему произошла ошибка, но я не могу сказать, что на самом деле не так.
int numbers [] - это массив длиной 6, а matchHighest - целое число = 0.
Я вызвал match6 в этой функции:
int match(int numbers[], int matchHighest){
int matchArray[] = {0, 0, 0, 0, 0};
int i = 0;
char m6[100] = "";
char *m6p = m6;
match6(&numbers[i], matchArray, &m6[100]);
Вот где происходит ошибка:
int match6 (int numbers[], int matchArray[5], char *m6){
int i=0;
while((numbers[i]==numbers[i+1]) && (i<5)){
i++;
}
if(i == 5){
matchArray[4] = 6 * numbers[0] + 27;
sprintf(m6, "Rule match-6(%d) - score %d", numbers[0], matchArray[4]);
printf("%s\n", m6);
}
return matchArray[4];
}
Когда она запускается, я получаю эту ошибку (все значения внижние значения правильные и ожидаемые):
draft6.c: 98 ошибка времени выполнения - переполнение буфера в стеке
dcc Объяснение: доступ за концом локальной переменной.Убедитесь, что размер вашего массива правильный.Убедитесь, что индексы вашего массива верны.
Здесь остановлено выполнение в match6 (4) - счет 51 ") в draft6.c в строке 98:
if(i == 5){
matchArray[4] = 6 * numbers[0] + 27;
--> sprintf(m6, "Rule match-6(%d) - score %d", numbers[0], matchArray[4]);
printf("%s\n", m6);
}
Значения, когда выполнение остановлено:
i = 5
m6 = "Rule match-6(4) - score 51"
matchArray[4] = 51
numbers[0] = 4