gpt4 book ai didi

c: strtod:双指针与对单指针的引用

转载 作者:太空狗 更新时间:2023-10-29 16:00:36 27 4
gpt4 key购买 nike

效果很好。

#include <stdio.h>
#include <stdlib.h>
int main(void){
char number[]= "a123.45", *strtod_eptr;
double num;

num=strtod(number, &strtod_eptr);
if (strtod_eptr == number){
printf("Error: no number found.\n");
}
else{ printf("%f\n", num+7);
}

return 0;
}

不起作用。 strtod() 中的第二个参数改变了类型。

#include <stdio.h>
#include <stdlib.h>
int main(void){
char number[]= "a123.45", **strtod_epptr;
double num;

num=strtod(number, strtod_epptr);
if (*strtod_epptr == number){
printf("Error: no number found.\n");
}
else{
printf("%f\n", num+7);
}

return 0;
}

编译器警告未初始化的 strtod_epptr 但没有编译错误。

strol_test.c:7:5: warning: ‘strtod_epptr’ is used uninitialized in this function [-Wuninitialized]

程序在 if() 语句处崩溃(段错误)。

编译器命令(在两种情况下):

gcc -Wall -pedantic -o "strol_test" "strol_test.c"

为什么会这样?为什么 gcc 提示未初始化的 **strtod_epptr 而完全没问题(类似地未初始化?) *strtod_eptr ?取消引用 **strtod_epptr 时出了什么问题?据我所知:

char *ptr;
...strtod(...,&ptr)

应该是一样的

char **ptr;
...strtod(...,ptr)

但显然不是。我错过了什么?

最佳答案

想想内存。

当您编写 char *str 时,您要求编译器为 char 指针分配内存。现在,当您将 str 的地址发送到函数时,如 &str str 中的值可以更改。

现在反过来。

当您编写 char **str 时,您要求编译器为指向 char 指针的指针分配内存。这意味着没有为 char 指针分配内存。如果您现在取消引用该指针,它将指向任何有意义的内容。

现在,您将 str 传递给 strtod()。该函数现在执行 *str = something()。但是那个地方在内存中不存在。该存储桶未创建和分配。

以后,总是传递一个已经存在的变量的地址。如果不是,则函数无法更新变量...

关于c: strtod:双指针与对单指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591705/

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