C使用数组将字符串转换为整数

时间:2016-04-17 12:48:49

标签: c arrays atoi

我正在制作一个用户输入等级(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;
}

2 个答案:

答案 0 :(得分:1)

从num [20]声明中删除'*',因为您声明了20个字符串指针,因此读取和比较num [i]的值将导致错误。 此外,你只需要一个简单的字符串来获得成绩。

答案 1 :(得分:0)

程序崩溃的原因是num是指针数组,num的元素不能指向用于存储您输入的字符串的有效内存。 您可以将char *num[10]更改为char num[10][12]和&#39; scanf(&#34;%s&#34;,&amp; num [i])to scanf("%s", num[i]),并确保一切正常

当然,您可以使用mallocnum中的每个元素动态分配内存,例如:

`for(i = 0; i < 10; i ++){
     num[i] = (char*)malloc(sizeof(char) * 12);
  }
`

即便如此,您必须将scanf("%s", &num[i])更改为scanf("%s", num[i]); 最后,你不能忘记释放你只是动态malloc的记忆。