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]),一切都会好起来的。

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

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

就算想了,也得把scanf("%s", &amp;num[i])改成scanf("%s", num[i]); 最后,你不能忘记释放你刚刚动态malloc的内存。

【讨论】:

以上是关于C使用数组将字符串转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

用C语言递归法将一个整数化为字符串

TS:整数、字符串、数组之间的转换

C语言 将一个整数转换成一个字符串

将矩阵字符串数组转换为整数矩阵? C++

将数组中的字符转换为整数

标准C语言中如何将字符串中的内容转换为字符数组?