Странный сбой с strtol() в C
Я делал некоторые доказательства с помощью strtol() из библиотеки stdlib, потому что у меня была программа, которая всегда зависала, и я обнаружил, что это работает отлично:
main(){
char linea[]="0x123456",**ap;
int num;
num=strtol(linea,ap,0);
printf("%d\n%s",num,*ap);
}
Но когда я добавил просто новую декларацию, где бы она ни разбилась, вот так
main(){
char linea[]="0x123456",**ap;
int num;
num=strtol(linea,ap,0);
printf("%d\n%s",num,*ap);
int k;
}
просто добавив этот последний "int k;" программа потерпела крах при выполнении strtol(), не могу понять, почему. Я делаю это на Code::Blocks
1 ответ
Решение
Вы получаете сбой, потому что вы проходите strtol
неинициализированный указатель и strtol
разыменовывает это. Вы не получите крушение в первый раз по чистой случайности.
Это не будет сбой:
main() {
char linea[]="0x123456", *ap;
int num;
num = strtol(linea, &ap, 0);
printf("%d\n%s", num, ap);
int k;
}