gpt4 book ai didi

c - 字符串太长,没有给我正确的答案

转载 作者:太空狗 更新时间:2023-10-29 11:25:02 26 4
gpt4 key购买 nike

我正在尝试将存储在 c 字符串中的数字转换为 long int。但是我没有得到预期的输出:

char str[] = "987654321012345";
long int num ;
num = 0;
//num = atol(str);
num = strtol(str, (char **) NULL, 10);
printf("%ld", num);

输出:821493369

gcc 版本 4.4.7 20120313(红帽 4.4.7-16)你能告诉我我在这里做错了什么吗?谢谢。

最佳答案

除了使用long long,您还可以使用stdint.h 中的精确宽度 类型。例如,要保证 64 位 signed 数字,您可以使用 int64_t 类型。无论您做什么,不要将 NULL 转换为char ** 并且始终 验证您的转换。例如,

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main (void) {

char str[] = "987654321012345";
long num = 0;
errno = 0;

num = strtol (str, NULL, 10);
if (errno) { /* validate strtol conversion */
perror ("strtol conversion failed.");
return 1;
}

printf ("%ld\n", num);

return 0;
}

示例使用/输出

$ ./bin/strtoltst
987654321012345

您可以对转换进行额外的错误检查,但至少,请确保在调用 strtolstrtoll< 后未设置 errno/.

如果您想使用保证宽度类型,那么您可以进行以下更改:

...
#include <stdint.h>
...
int64_t num = 0;
...
num = strtoll (str, NULL, 10);

结果是一样的。

关于c - 字符串太长,没有给我正确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45411217/

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