gpt4 book ai didi

c - strtol 的段错误

转载 作者:行者123 更新时间:2023-11-30 15:00:20 26 4
gpt4 key购买 nike

使用指针:

char a[]=" 0xa this is a343 good";
char* *endptr=NULL;
long int b=0;
b=strtol(a,endptr,0);
b=strtol(*endptr,endptr,0);

为什么我在最后一行出现段错误? *endptrchar * 还是?如果我很好地理解了 strtol 的行为,它会读取第一个整数 10 ,然后 *endptr 将是指向 之后的下一个空格的指针>0xa。我说得对吗?

最佳答案

您的崩溃与 strtol 无关。问题在于您取消引用了值为 NULL 的指针。这是非法的并会导致崩溃(段错误)。

您的问题在这里:

b=strtol(*endptr,endptr,0);
^^^^^^^
Dereference a NULL leads to a crash

您的问题与此代码相同:

char** endptr=NULL;
char* p = *endptr; // Crash!!

所以你的问题确实与 strtol 无关。

关于strtol:

如果你想让strtol更新*endptr,你需要传递一个不是NULL的值.

实现的方法是创建一个 char* 变量(注意:不是 char**)并传递 * char*strtol 的**地址。

喜欢:

char a[]=" 0xa this is a343 good";
char* p; // Notice: just one * as you need a pointer to char
long int b=0;
b=strtol(a, &p,0);
^^
Notice: & (aka address of). So you pass the address of
a pointer to char. Equivalent to char** as expected
by strtol

关于c - strtol 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42190693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com