問題我試圖創建與C從libpq數據庫連接。如果我創建與PQconnectdb連接,一切工作正常,但如果我創建它與PQconnectdbParams函數,具有相同只有以不同方式存儲的參數(請參閱libpq reference),我得到了分段錯誤錯誤,沒有任何其他消息。有人可以幫我解決這個問題嗎?試圖連接到postgres從C
你可以看到波紋管我的代碼:
int main(int argc, char *argv[]) {
char **keywords;
char **values;
char *line = malloc(50);
char *prop, *tmp, *val;
int i = 0, j = 0;
FILE *creds = fopen("/path/to/file.props", "r");
if (creds == NULL) {
LOG("%s", "error: cannot open credentials file.\n");
exit(1);
}
keywords = malloc(5 * sizeof(*keywords));
values = malloc(5 * sizeof(*values));
while (fgets(line, LINE_SIZE, creds) != NULL) {
if (line[strlen(line) - 1] == '\n')
line[strlen(line) - 1] = '\0';
prop = line;
while(*(prop++) != '=') {
i++;
}
tmp = prop;
prop = malloc(i + 1);
strncpy(prop, line, i);
prop[i] = '\0';
keywords[j] = prop;
val = malloc(strlen(line) - strlen(prop) + 1);
strcpy(val, tmp);
values[j++] = val;
i = 0;
}
printf("%s %s %s %s %s\n", keywords[0], keywords[1], keywords[2], keywords[3], keywords[4]); //that lines prints ok
printf("%s %s %s %s %s\n", values[0], values[1], values[2], values[3], values[4]); //
PGconn *conn = PQconnectdbParams(keywords, values, 0);
if (PQstatus(conn) != CONNECTION_OK) {
fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
}
你檢查過GDB嗎?它在哪裏指向代碼?你可以使用'strtok_r()'&'strdup()'來代替嗎?它是什麼操作系統? – SparKot 2013-02-23 10:59:46