为啥 atoi 功能不起作用?

Posted

技术标签:

【中文标题】为啥 atoi 功能不起作用?【英文标题】:why the atoi function is not working?为什么 atoi 功能不起作用? 【发布时间】:2016-12-10 11:09:38 【问题描述】:

程序停止工作。 即使我只放一个int。 我尝试了许多不同的方法,但无法弄清楚出了什么问题。 我正在尝试输入以空格分隔的整数。 可以有任意个整数。

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

int main(void) 
    int i,j=0;
    int b[100];
    char a[100];
    fgets(a,100,stdin);
    for(i=0;i<strlen(a);i++)
    
        b[i] = atoi(a[j]);
        j=j+2;
    
    for(i=0;i<strlen(b);i++)
    
        printf("%d ",b[i]);
    

【问题讨论】:

试试for(j=0;j&lt;i;j++) printf("%d ",b[j]); b[i] = atoi(&amp;a[j]);j&lt;strlen(a) 如果没有&lt;string.h&gt;,这甚至不应该编译,因为您使用的是strlen() 记住 atoi 需要一个字符数组而不是单个字符 这个项目的目的是什么?你忘了在问题中提到这一点。 fix like this 【参考方案1】:

这是 atoi 的原型,你必须使用一个字符数组,但你只发送一个字符。atoi(str[i])

int atoi(const char *str)


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

int main()

   int val;
   char str[20];

   strcpy(str, "98993489");
   val = atoi(str);
   printf("String value = %s, Int value = %d\n", str, val);


   return(0);

【讨论】:

C library function - atoi() 那我该怎么办? 删除那些循环并遵循上述语法 我如何输入一些用空格分隔的未知数量的整数? 您可以使用二维数组来存储它们。 char data[5][20] 并遵循语法b[i]=atoi(data[i]));【参考方案2】:

执行以下操作:

for(i = 0; i < strlen(a); i += 2)

    b[j] = a[i];
    j++;

【讨论】:

【参考方案3】:

虽然 atoi() 只接受一个字符串参数,或者你可以说常量 char 指针,而 str[i] 只不过是一个指向字符数组中单个字符的指针。 因此,一旦我们通过 atoi(str[i]) ,这意味着我们正在向函数传递一个字符,这将给出一个错误。 因此,您必须从要将子字符串转换为数字的特定字符的地址传递,即 atoi(&str[i])。

【讨论】:

以上是关于为啥 atoi 功能不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 memset 功能不起作用? [复制]

为啥复制功能在 setTimeout 中不起作用?

为啥这个(Django)“过滤器”功能不起作用?

为啥交换功能对我不起作用? [复制]

为啥这个 jquery 终端命令功能不起作用?

为啥我的打印功能不起作用?链表