使用atoi()并打印字符串失败 - C

时间:2015-11-29 16:17:19

标签: c visual-studio printing atoi

我想编写一个程序,它将读取几个字符串,使用atoi()将其中一个转换为整数,然后再打印另一个。

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 3

int main() {
    char Name[N][20], Sname[N][20], afm[N][5];
    int i = 0;
    char slash;
    int date, month, year;
    int afmi;

    while (1) {

        printf("Give a 5-digit number: ");
        gets(afm[i]);

        afmi = atoi(afm); //Converting the afm string to an integer

        if (afmi == 0) { /*Getting out of the while loop as soon as the afm                                                              string gets 0 as an input. */
            break;
        }

        printf("Give your name: ");
        gets(Name[i]);

        printf("Give your Surname: ");
        gets(Sname[i]);

        printf("Birth date: "); //dd/mm//yy format
        scanf("%d%c%d%c%d", &date, &slash, &month, &slash, &year);
        getchar();


        i++;
    }

    for (i = 0; i <= N+1; i++) {  /*Here i want to print all the names i have input, one under another*/ 
        printf("name: %s \n", Name);
    }

    system("pause");
    return 0;
}

所以我的问题是,如果我第二次输入0作为输入,它不会退出while循环。而且,它最终没有正确打印名称......我该怎么办? (考虑到我是业余爱好者:D) 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

字符串空间不足。 @barak manos

当以下代码尝试将char读入afm[i]时,它会调用未定义的行为作为5 char的键盘输入,例如&#34; abcde&#34;和输入,尝试将'a''b''c''d''e''\0'存储到{ {1}}。

afm[i]

以上是使用// Bad code #define N 3 char afm[N][5]; printf("Give a 5-digit number: "); gets(afm[i]); 问题的一个例子,它在C11中不再是标准。

而是使用gets()

fgets()