C使用数组将字符串转换为整数
Posted
技术标签:
【中文标题】C使用数组将字符串转换为整数【英文标题】:C Convert string to integer using arrays 【发布时间】:2016-04-17 12:48:49 【问题描述】:我正在制作一个程序,用户输入等级(1 到 5),然后将等级添加到数组中以供以后检查。当用户输入字母“s”时,程序关闭。我的程序在运行时崩溃,为什么?
#include <stdio.h>
#include <stdlib.h>
int i;
int grade[50];
char *num[20];
int enter();
int enter()
for (i=0; i<10; i++)
printf("\nEnter grade:\nPress [s] to close program\n");
scanf("%s",&num[i]);
if (strcmp(num[i],"s") == 0)
break;
else
grade[i] = atoi(num[i]);
int main()
enter();
for (i=0; i<10; i++)
printf("\n%d",grade[i]);
return 0;
【问题讨论】:
再次读取 C 中的 char 数组和字符串。 为什么不做整数数组呢?并且您应该初始化数组,因为无论它们是否添加到 enter 方法中,您都会打印 10 个值 如果用户(我们不能信任用户,我们可以吗????)输入“S”或“q”或“exit”怎么办? :-) 【参考方案1】:从 num[20] 声明中删除 ' * ',因为您声明了 20 个字符串指针,因此使用 num[i] 读取和比较值将导致错误。 此外,您只需简单的字符串即可获得成绩。
【讨论】:
删除 '*' 只会导致警告:[警告] 传递 'atoi' 的参数 1 会在没有强制转换的情况下从整数中生成指针【参考方案2】:程序崩溃的原因是num
是一个指针数组,num
的元素不能指向用来存储你输入的字符串的有效内存。
您可以将char *num[10]
更改为char num[10][12]
和'scanf("%s", &num[i])to scanf("%s", num[i])
,一切都会好起来的。
当然,你可以使用malloc
为num
中的每个元素动态分配内存,比如:
`for(i = 0; i < 10; i ++)
num[i] = (char*)malloc(sizeof(char) * 12);
`
就算想了,也得把scanf("%s", &num[i])
改成scanf("%s", num[i])
;
最后,你不能忘记释放你刚刚动态malloc的内存。
【讨论】:
以上是关于C使用数组将字符串转换为整数的主要内容,如果未能解决你的问题,请参考以下文章