使用atoi / sprintf将整数转换为字符串

时间:2016-01-05 22:12:05

标签: c arrays string pointers casting

这不是我的全部代码我只是总结起来很容易看到。我没有问题将字符串转换为整数但我不能将整数转换为字符串。 该程序刚崩溃。这是代码。查看itoa行。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#define SIZEX 49
#define SIZEY 6

int main() {
    size_t x, y;
    char *a[50][7];
    char name[50][100];
    char surname[50][100];
    char IN[50][100];
    char YOB[50][100];
    char usname[50][100];
    char pass[50][100];
    char totamount[50][100];

    for (x = 0; x <= SIZEX; x++) {         
        a[x][0] = name[x];
        a[x][1] = surname[x];
        a[x][2] = IN[x];
        a[x][3] = YOB[x];
        a[x][4] = usname[x];
        a[x][5] = totamount[x];
        a[x][6] = pass[x];
    }
    printf("\nPlease enter the name of the new user\n");
    scanf(" %s", a[0][0]);

    printf("Please enter the surname of the new user\n");
    scanf(" %s", a[0][1]);

    printf("Please enter the Identity Number of the new user\n");
    scanf(" %s", a[0][2]);

    printf("Please enter the year of birth of the new user\n");
    scanf(" %s", a[0][3]);

    printf("Please enter the username of the new user\n");
    scanf(" %s", a[0][4]);

    strcpy(a[0][6], a[0][4]);
    strrev(a[0][6]);

    a[0][5] = "0";

    int z;
    z = atoi(a[0][5]);
    z = z + strlen(a[0][4]) * 10;

    itoa(z, a[0][5], 10);
    //sprintf(a[0][5], "%d", z);

    printf("%s\n", a[0][5]);
    printf("%d\n", z);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

通过这样做:

a[0][5]="0";

您正在为a[0][5]指定一个指向包含字符串文字"0"的只读内存的指针。

下面:

itoa( z, a[0][5],10 );

你正试图在那里写,给你内存访问冲突。