I'm programming in C and compiling with gcc. Every time I compile I get a stack smashing detected error. What does this mean and how can I fix it?
#include <stdio.h>
#define MAX_ARRAY 50
static int getScore(int assignmentNum[], int weight[], int daysLate[], float score[]){
int position, tempWeight, tempLate;
float tempScore;
scanf("%d %f %d %d", &position, &tempScore, &tempWeight, &tempLate);
score[position] = tempScore;
weight[position] = tempWeight;
daysLate[position] = tempLate;
assignmentNum[position] = position;
return weight[position];
}
int main(void){
int penalty_points, num_drop, num_assignment;
static int assignmentNum[MAX_ARRAY], daysLate[MAX_ARRAY], weight[MAX_ARRAY];
static float score[MAX_ARRAY];
char statGen;
int total = 0;
scanf("%d %d %s", &penalty_points, &num_drop, &statGen);
printf("%d\n", penalty_points);
while (total < 100) {
total = total + getScore(assignmentNum, weight, daysLate, score);
}
return 0;
}
You use %s
with &statGen
. The %s
specifier is for a string; the corresponding argument must point to a buffer with enough space for the string, including a terminating null character. However, statGen
is a single char
.
To read just a single char
, use "%c"
instead of "%s"
. If you want to skip white space before the character, use " %c"
. The space asks scanf
to skip white space.