如何初始化char指针数组,以避免垃圾值?

时间:2015-01-12 18:51:36

标签: c arrays pointers garbage

我遇到的问题是,我尝试初始化的一些全局字符串指针数组在我初始化它们的函数超出范围之后变得充满了垃圾数据。

char *dept_vals[255];
char *num_vals[255];
char *day_vals[255];
char *bldg_vals[255];
char *instr_vals[255];
int start_vals[255];
int end_vals[255];
int sect_vals[255];
int room_vals[255];

int idx;

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
    int i = 0;
    while(i < argc)
    {
        dept_vals[idx] = argv[i++];
        num_vals[idx] = argv[i++];
        start_vals[idx] = atoi(argv[i++]);
        end_vals[idx] = atoi(argv[i++]);
        day_vals[idx] = argv[i++];
        sect_vals[idx] = atoi(argv[i++]);
        bldg_vals[idx] = argv[i++];
        room_vals[idx] = atoi(argv[i++]);
        instr_vals[idx] = argv[i++];

        idx++;

    }
    return 0;
}

当我在不同的功能中打印值时,内容不正确。但是,我在同一函数中初始化的整数数组中的值具有正确的值。我怀疑我初始化char指针数组的方式导致意外行为,但我不完全确定在这种情况下初始化它们的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

代码

dept_vals[idx] = argv[i++];

将argv [i]的地址复制到dept_vals [idx]中,但正如您所指出的那样,当您返回时,这超出了范围。您想复制实际的字符串:

dept_vals[idx] = malloc(strlen(argv[i]) + 1);
strcpy(dept_vals[idx], argv[i]);
++i;