1

私はmySQLプログラミングの初心者であり、非常に基本的な問題に遭遇したようです。

次のコードがありますが、「データベースの作成」部分でセグメンテーション違反が発生しました。

MYSQL *s1;
MYSQL mysql_sense;
char strBuf[8192] = {0};
char DB_NAME[300] = "0_4_3";

mysql_init(&mysql_sense);

sprintf(strBuf, "CREATE DATABASE IF NOT EXISTS %s;", DB_NAME);
mysql_real_query(&mysql_sense, strBuf, strlen(strBuf));  // seg fault here

私は試した

CREATE DATABASE IF NOT EXISTS 0_4_3

実際のmySQLで、エラーはありませんでした。コードでセグメンテーション違反が発生するのはなぜですか?

4

2 に答える 2

2
  1. mysql_connect()あなたはまたはをしませんmysql_real_connect()
  2. の戻り値はチェックしませんmysql_init()
于 2012-04-16T10:52:56.367 に答える
0

それはあなたの問題とは無関係かもしれませんが、ドキュメントには次のように書かれています:

デフォルトでは、mysql_query()とmysql_real_query()は、ステートメント文字列引数を実行される単一のステートメントとして解釈し、ステートメントが結果セット(SELECTの場合は行のセット)を生成するか、影響を受けるかに従って結果を処理します。 -行数(INSERT、UPDATEなど)。

http://dev.mysql.com/doc/refman/5.5/en//c-api-multiple-queries.html

ステートメントは1つしかないため、末尾のセミコロンを削除するように修正するのが最も簡単です。

于 2012-04-16T10:41:31.633 に答える