mysql_init覆盖内存空间

时间:2018-01-30 15:38:03

标签: c

当我调用mysql_init(mysql);时,它会覆盖char数组。我不明白我做错了什么。我的代码:

void prepare_mysql(MYSQL *mysql) {
    mysql_library_init(0, NULL, NULL);
    mysql_init(mysql);
}

void get_uid(char *src, char *dst) {
    int i, len, count = 0;
    len = strlen(src);
    for(i = 0; i != len; i++) {
        if(src[i] == '-') { // iterate until a - sign is found
            break;
        }
        dst[count] = src[i]; // save char into dst
        count++;
    }
    dst[count] = '\0'; // add null char at the end of char array, otherwise everything will explode...
    // dst is now: 389302
}

int main(int argc, char *argv[]) {
    // argv[1] is for example: 389302-8232
    char uid;
    get_uid(argv[1], &uid);
    printf("uid = %s\n", &uid); // prints: 389302 (correct)

    MYSQL conn;
    prepare_mysql(&conn);

    printf("uid = %s\n", &uid); // prints: 3 (the first char only.. why?)

    mysql_close(&conn);
    mysql_library_end();
    return 0;

}

如果我在致电get_uid后拨打mysql_init电话,我就无法拨打mysql_close(&conn),因为我收到了Segmentation fault。请帮忙,我无法理解..

编辑: 我在main中添加了这个:

char *uid = malloc(strlen(argv[1]));

后来在主要部分,我打电话给free(uid);。现在它似乎在我打电话之前无处不在正确打印。

1 个答案:

答案 0 :(得分:3)

你没有char数组 - massUnit只是一个字符。