Ошибка проверки времени выполнения № 2 - стек вокруг переменной 'tempID' поврежден
Недавно я начал кодировать на c, и во время кодирования я столкнулся с этой ошибкой во время выполнения, которая не может найти решение. Он либо отображает эту ошибку времени выполнения, либо останавливается после scanf
в случае, если клиент найден, вы выбираете, что вы хотите редактировать, а затем вводите новую информацию.
Пример:
- введенный ID:322993
- НАЙДЕННЫЙ
- Нажмите [1], чтобы изменить идентификатор
- Введите новый идентификатор
- программа застревает
Вот код:
void modifyCustomer(){
int counter=0;
long int tempID=0;
flag found = false;
fflush(stdin);
printf("Enter Customer ID\n");
scanf("%lld", &tempID);
do{
char option_str[200];
int option = 0;
char *not_valid;
if(tempID == customers[counter].customerID){
printf("Customer found!\n");
found = true;
do{
fflush(stdin);
printf("Choose what to modify:\n 1. ID\n 2. Name\n 3. Surname\n 4. Address\n 5. Mobile\nOption: ");
scanf("%s", &option_str);
option = strtol(option_str, ¬_valid, 10);
fflush(stdin);
if (*not_valid != '\0') {
printf("%s is not valid.\n", not_valid);
} else{
switch(option){
case 1:
printf("Enter new ID:\n");
scanf("%d\n", &customers[counter].customerID);
printf("Customer Modified Successfully!\n");
break;
case 2:
printf("Enter new Name:\n");
scanf("%s\n", &customers[counter].customerName);
printf("Customer Modified Successfully!\n");
break;
case 3:
printf("Enter new Surname:\n");
scanf("%s\n", &customers[counter].customerSurname);
printf("Customer Modified Successfully!\n");
break;
case 4:
printf("Enter new Address:\n");
scanf("%s\n", &customers[counter].customerAddress);
printf("Customer Modified Successfully!\n");
break;
case 5:
printf("Enter new Mobile:\n");
scanf("%lld\n", &customers[counter].customerMobile);
printf("Customer Modified Successfully!\n");
break;
default:
printf("You did not enter a valid Number. Please re-enter your Input \n");
break;
}
}
}while((option <1) || (option > 5));
}
else{
counter++;
}
}while((found != true) && (counter < (custNum-1)));
if (found == false)
printf("Customer not found!\n");
}
Почему это происходит?
1 ответ
%lld
спецификатор формата для long long
, Вы объявили long int
Возможно, вы пытаетесь записать в больший тип, чем у вас есть хранилище. Эффект этого не определен, но запись в следующую переменную стека весьма вероятна, если sizeof(long int) != sizeof(long long)
на вашей платформе.
Вы можете исправить это, изменив tempID
быть типом long int
или изменив спецификатор формата, который вы используете для %ld
,