【问题标题】:atoi from string to Integer using char pointeratoi 使用 char 指针从字符串到整数
【发布时间】:2012-01-29 16:04:18
【问题描述】:

这是我编写的代码,它在 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 作为年份,但我想将其转换为整数格式。如何使用指针将该值作为整数检索?

【问题讨论】:

  • 注意:strtonum 是 atoi/atol 的“安全稳健”版本
  • 注意:main() 返回int,并采用(void)(int, char **)

标签: c pointers


【解决方案1】:

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

    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]

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

【讨论】:

    【解决方案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"
    

    【讨论】:

    • 在我之后 8 秒,但更完整的答案。
    【解决方案3】:

    用途:

    int value = atoi(ptr);
    

    atoi 应该得到一个字符指针,这就是ptr 的含义。 *ptr 是第一个字符 - 在这种情况下为 1,并且无论如何都不是指针,因此它对于 atoi 是不可用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多