当我打电话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/