我试图找出是否有一种在C中将字符串转换为整数的替代方法.
我经常在我的代码中模式化以下内容.
char s[] = "45";
int num = atoi(s);
Run Code Online (Sandbox Code Playgroud)
那么,有更好的方式或其他方式吗?
我已经习惯了strtod
和变种.我想知道为什么stdlib.h没有附带strtoi.为什么整数被排除在这个派对之外?
具体来说,我问为什么没有版本的atoi具有strtod的安全功能.
下面的程序将字符串转换为long,但根据我的理解,它也会返回错误.我依赖的事实是,如果strtol
将字符串成功转换为long,那么第二个参数strtol
应该等于NULL.当我用55运行以下应用程序时,我收到以下消息.
./convertToLong 55
Could not convert 55 to long and leftover string is: 55 as long is 55
Run Code Online (Sandbox Code Playgroud)
如何成功检测strtol的错误?在我的应用程序中,零是有效值.
码:
#include <stdio.h>
#include <stdlib.h>
static long parseLong(const char * str);
int main(int argc, char ** argv)
{
printf("%s as long is %ld\n", argv[1], parseLong(argv[1]));
return 0;
}
static long parseLong(const char * str)
{
long _val = 0;
char * temp;
_val = strtol(str, &temp, 0);
if(temp != '\0')
printf("Could not convert %s to long and …
Run Code Online (Sandbox Code Playgroud) 这是一个“可以提出并回答你自己的问题”。\n我研究了这个问题,发现结果很好奇,并发布了我的发现。
\n\nstrtoul()
“非常负”的字符串应该从: 1
,返回什么值ULONG_MAX
或者什么?
strtol()
对于表示数值的字符串,如"123"
,strtol()
的行为符合预期。字符串(蓝色)[LONG_MIN ... LONG_MAX]
转换为其预期long
值。上面的字符串(黄色)LONG_MAX
转换为LONG_MAX
并设置errno==ERANGE
。下面的字符串LONG_MIN
转换为LONG_MIN
并设置errno==ERANGE
。
strtoul()
积极的
对于表示数值的字符串,如"123"
, strtoul()
也按预期运行。字符串(红色)[0 ... ULONG_MAX]
转换为其预期unsigned long
值。上面的字符串(绿色)ULONG_MAX
转换为ULONG_MAX
并设置errno==ERANGE
。
\n\n\n如果主题序列以减号开头,则转换产生的值将被取反(在返回类型中)。C17dr \xc2\xa7 7.22.1.4 5
\n
strtoul()
消极的
对于字符串(红色)[-ULONG_MAX ... -1]
,转换会否定正转换并添加ULONG_MAX + 1
(就像将负值分配给 …
当我string
在下面的代码中传递一个变量时,g ++给出了一个错误:
不能将'std :: __ cxx11 :: string {aka std :: __ cxx11 :: basic_string}'转换为'const char*'以将参数'1'转换为'int atoi(const char*)'
我的代码是:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
string a = "10";
int b = atoi(a);
cout<<b<<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将代码更改为:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
char a[3] = "10";
int b = atoi(a);
cout<<b<<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
请解释为什么string
不起作用.有什么区别string a
和char a[]
?