将日期数组转换为整数

时间:2014-06-24 14:55:31

标签: c arrays pointers char type-conversion

我正在使用C编程语言。我目前有一个日期的二维字符数组,格式为" 2010-05-01" 。我想将每个数字转换为整数数据类型,然后将它们存储在整数数组中。原因是因为我需要一个单维的整数数组,然后我可以使用指针通过引用传递给函数。

请参阅下面的我目前的代码:

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

int main()
{
    float values[] = { //Contains 100 float literals }
    int i, j, size = sizeof(values)/sizeof(*values);
    char strings[][10] = {"2010-05-01", "2010-10-01" //Contains a total of 100 dates}
    int dates[size * 3];

    for (i = 0, j = 0; j < size; ++i, ++j) {
        dates[i] = atoi(strtok(strings[j], "-"));
        dates[++i] = atoi(strtok(NULL, "-"));
        dates[++i] = atoi(strtok(NULL, "-"));
    }

    for (i = 0; i < size; ++i)
        printf("%d\n", dates[i]);
    return 0;
}

此代码当前返回总线错误,我不明白为什么。我是一个相对初学者,很抱歉,如果我做了一些愚蠢的事情。任何意见将不胜感激,谢谢您的时间。

2 个答案:

答案 0 :(得分:1)

char strings[][10]应为char strings[][11]以考虑尾随空字符。

您似乎将每个日期解析为dates数组中的三个条目 - 这是意图吗?

答案 1 :(得分:1)

要独立提取年份,日期和月份并将它们放在同一个数组中,您可以将年份组合在一起,然后是几个月,然后是几天(假设日期格式为yyyy-mm-dd )。这样的数组可以存储以下序列:

y1, y2, y3, m1, m2, m3, d1, d2, d3

以下代码在数组ymd

中执行此类操作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 2

int main()
{
    int i;
    char strings[SIZE][11] = {"2010-05-01", "2010-10-01" };
    int ymd[SIZE*3];

    for (i = 0; i < SIZE; i++) {
        ymd[i*3] = atoi(strtok(strings[i], "-"));
        ymd[i*3+1] = atoi(strtok(NULL, "-"));
        ymd[i*3+2] = atoi(strtok(NULL, "-"));
    }

    for (i = 0; i < SIZE; i++)
        printf("%d/%d/%d\n", ymd[i*3], ymd[i*3+1], ymd[i*3+2]);
    return 0;
}

输出将是:

2010/5/1
2010/10/1