gpt4 book ai didi

c - strtol 未按预期工作

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

我无法使用 strtol 将字符串转换为长字符串。在字符串中的数字之前有一个前导 "." 将返回 0。如果没有 ".",strtol 将按预期返回 3456

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

int main ()
{
char str[20] = " . 3456\r\n";

long ret = strtol(str, NULL, 10);
printf("ret is %ld\n",ret);

return(0);
}

最佳答案

strto* 库函数只会跳过前导空格。如果你想跳过其他文本,你需要手动完成。 ctype.h 中的 isxxx 函数可以帮助解决这个问题:

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

int main (int argc, char **argv)
{
char *p, *endp;
unsigned long ret;
int fail = 1;

if (argc != 2) {
fprintf(stderr, "usage: %s number-to-parse\n", argv[0]);
return 2;
}
p = argv[1];
while (*p && !isdigit(*p)) p++;

errno = 0;
ret = strtoul(p, &endp, 10);
if (endp == p)
printf("'%s': no number found\n", str);
else if (*endp && !isspace(*endp))
printf("'%s': junk on line after number\n", str);
else if (errno)
printf("'%s': %s\n", str, strerror(errno));
else {
printf("'%s': parsed as %lu\n", str, ret);
fail = 0;
}
return fail;
}

关于c - strtol 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49554847/

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