c - mysql_init覆盖内存空间

标签 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]));

稍后在 main 中,我调用 free(uid); 。现在,在我调用 free 之前,它似乎在任何地方都可以正确打印。

最佳答案

您没有字符数组 - uid 只是一个字符。

关于c - mysql_init覆盖内存空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48525176/

相关文章:

c - 尝试将字符附加到 C 中的字符串时,xCode 上的 EXC_BAD_ACCESS 代码 2

c - 整数上的无分支条件——很快,但它们能变得更快吗?

c - C 中 'complex' 的默认类型

c - Cassandra 是否存在 C 语言客户端库?

c - 将模数转换器ADC(0804)的数字数据存储在8051中

c - 此 C 代码如何打印正确的字符串?

c++ - 有什么方法可以为函数指针比较生成警告?

c - 程序在接受用户输入后不给出任何输出

c中fork()系统调用的混淆行为

c - vs 2010 中的未定义标签错误