2017-03-23 5 views
0

私はC++をとても新しくしています。MySQLデータベースからテキストファイル(.txt)に返す行を印刷しようとしたときに、このC++をどのように修正できるかを知っている人は誰でも知っています

アプリケーションの基本的な目的は、ユーザーがSQLクエリを入力し、データベースからの結果の行をテキスト(.txt)ファイルに戻すことができるようにすることです。ここで

前の部分とint型の主(のための変数である)

#include <iostream> 
#include <string> 
#include <windows.h> 
#include <mysql.h> 
#include <fstream> 

using namespace std; 

int main(int argc, char** argv) 
{ 
    MYSQL* conn; 
    MYSQL_ROW row; 
    MYSQL_RES *res; 
    unsigned int num_rows; 
    unsigned int ii; 
    int qstate; 

これは、プログラムがクラッシュを作るの問題を引き起こし続けるのコードセグメントであるが、それはさせていただきまして、私だけでカントの図今までクラッシュが

if(!qstate) 
{ 
    res = mysql_store_result(conn); 
    cout<<"Enter File Name: "<<endl; 
    std:string FileName; 
    std::getline(cin, FileName); 

    string FN = ""+FileName+".txt"; 

    const char* fileN = FN.c_str(); 

    ofstream theSaveFile(fileN, ios::app); 

    num_rows = mysql_num_rows(res); 
    row = mysql_fetch_row(res); 

    for(ii = 0; ii < num_rows; ii++) 
    { 
     if(!theSaveFile) 
     { 
      cout<<"Printing to the file failed" 
      <<endl; 
      exit(1); 
     } 
     theSaveFile<<""+row+" \t\t"; 
    } 
+0

これまでにデバッガを使用しましたか? – kim366

+0

クラッシュしているコードの正確な行がわからず、C++を初めて使う人には、デバッガを使ってコードをステップ実行する方法を学ぶための素晴らしい時間です。 – Baldrick

+0

@Baldrick私は今日、その正確な文章をすでに読んできました。それはコピー貼りのものですか? :P – kim366

答えて

2
row = mysql_fetch_row(res); 

すべてアップは大丈夫に見えますが、その後は文字列として扱うrow

theSaveFile<<""+row+" \t\t"; 

これは間違っています。あなたの末尾の+" \t\t"とあなたの変わった""+(これをしないでください; C++はJavaScriptではありません)はおそらく範囲外のポインタ算術を実行しています。あなたが適切に行わストリーミングしたい場合:

theSaveFile << row << " \t\t"; 

は、私はあなたのコンパイラがより良い rowをこのように扱うことができないことを警告するために配置されるだろうと想像します。

There's an example in the manual of how to use MYSQL_ROW。ヒント:配列です。結果セット内にそれぞれ(または "field")の要素が1つあります。

+0

ありがとうございました – Jay1995

関連する問題