为啥 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<i;j++) printf("%d ",b[j]);
和b[i] = atoi(&a[j]);
和j<strlen(a)
如果没有<string.h>
,这甚至不应该编译,因为您使用的是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 功能不起作用?的主要内容,如果未能解决你的问题,请参考以下文章