使用char指针将atoi从string转换为Integer

时间:2012-01-29 16:04:18

标签: c pointers

这是我编写的代码,它在c中拆分字符串,然后我想返回char指针指向的第一个整数值。

#include<stdio.h>
void main(){
    int month[12]={0};
    char buf[]="1853 was the year";
        char *ptr;
        ptr = strtok(buf," ");
        printf("%s\n",ptr);
        int value = atoi(*ptr);
        printf("%s",value);
} 

编辑:它给了我分段错误。

问题是它打印1853作为年份,但我想将其转换为整数格式。如何使用指针将该值检索为整数?

3 个答案:

答案 0 :(得分:4)

您在这里尝试使用整数作为字符串:

    printf("%s",value);

你应该做

    printf("%d",value);

编辑:是的,也是int value = atoi(ptr);在另一个答案中添加。

main也应该是int,而不是void。

另外,您使用的编译器是什么?使用gcc 4.6我在尝试编译代码时遇到了这些错误和警告(在添加一些包含之后):

ptrbla.C:5:11: error: ‘::main’ must return ‘int’
ptrbla.C: In function ‘int main()’:
ptrbla.C:11:30: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
/usr/include/stdlib.h:148:12: error:   initializing argument 1 of ‘int atoi(const char*)’ [-fpermissive]
ptrbla.C:12:26: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat]

我认为你可以从大多数编译器中获得至少一些这些。

答案 1 :(得分:2)

    int value = atoi(ptr);

无需取消引用,atoi()需要const char*,而不是char

    printf("%d",value);

使用%d%i打印整数。 %s仅用于字符串。


顺便说一句,也许您想使用strtol代替

char buf[]="1853 was the year";
char* next;
long year = strtol(buf, &next, 10);

printf("'%ld' ~ '%s'\n", year, next);
// 'year' is 1853
// 'next' is " was the year"

答案 2 :(得分:0)

使用:

int value = atoi(ptr);

atoi应该得到一个字符指针,这就是ptr*ptr是第一个字符 - 在这种情况下为1,无论如何不是指针,因此atoi无效。