2017-04-07 110 views
-2

我有一个字符串char * a ='343'。我想将其转换为整数值。从char *转换为int

例子。 char * a =“44221” 我想将该值存入int a;

+2

''343''不是字符串 –

回答

1

这应该有助于

#include <stdlib.h> 

inline int to_int(const char *s) 
{ 
    return atoi(s); 
} 

以防万一为例用法

int main(int ac, char *av[]) 
{ 
    printf(" to_int(%s) = %d " ,av[1] , to_int(av[1])); 
    return 0; 
} 
+0

- 在该包装中闪烁两次 - – Sebivor

4

这是最C运行库的一部分:

#include <stdlib> 

char *a = "1234"; 
int i = atoi(a); 

这就是atoi功能。请仔细阅读各种可用的方法。 C的图书馆非常精简,所以不用多久。

+0

['atoi'有害](https://blog.mozilla.org/nnethercote/2009/03/13/atol-considered-harmful/)和[shouldn' (http://stackoverflow.com/q/17710018/995714) –

3

有几种方法,以一个字符串(在一个char *指出)转换成int

我在这里列出其中的一些:
让我们假设您有一个字符串str decl ARED为:

char *str = "44221"; 
  1. INT A =的atoi(STR);
    这将返回由str指向的字符串转换的int值。虽然方便,但当用户提供无效输入时,此功能不会执行准确的错误报告。

  2. 使用的sscanf():这类似于通常的scanf除了它从一个字符串,而不是从stdin读取输入。

    int a; 
    int v = sscanf(str, "%d", &a); 
    // XXX: v should be 1 since 1 conversion is performed; handle the conversion error if it isn't 
    
  3. strtol将:此转换给定的字符串转换为长整型。文档发现在:http://man7.org/linux/man-pages/man3/strtol.3.html

    一般用法:

    char *ptr; 
    long a = strtol(str, &ptr, base); 
    

第一个无效字符(不是数字)的地址存储在ptr。基地是默认10

  • 通过迭代字符值:为什么取决于当你可以编写自己的程序来实现这个库?这并不难。这样你甚至可以执行所需的验证/错误检查。

    示例代码:

    unsigned char ch; 
    int a = 0; 
    // Add checks to see if the 1st char of the string is a '+' or '-'. 
    for (i = 0; i < strlen(str); i++) { 
        ch = str[i]; 
        //Add error checks to see if ch is a digit or not (e.g. using isdigit from <ctype.h>). 
        a = a*10 + (ch - '0'); 
    } 
    
  • 希望这有助于!