2

重複の可能性:
C/Objective-C で文字列リテラルを複数の行に分割する方法は?

次のような char 変数が指すいくつかの SQL ステートメントを作成する必要がある場合があります。

const char* sql="CREATE TABLE GenInf ( EmpName TEXT NOT NULL, Pyrll TEXT PRIMARY KEY,  DtBrth TEXT,  PlBrth TEXT, CID TEXT,  ContNo  TEXT,   JnDt TEXT,   Postn TEXT, Dept TEXT, AnnLv TEXT, EmrgLv TEXT, Irr TEXT, HmTwn TEXT, F1 TEXT, F2 TEXT ); CREATE TABLE Training( Pyrll TEXT NOT NULL, Crs TEXT, Dt TEXT, Plc TEXT, Cst TEXT);"; 

しかし、とても長いので、どうすれば2行にまとめることができるでしょうか?

4

3 に答える 3

7

C と C++ の文字列リテラルは並べて配置できるため、コードとまったく同じになります。

const char* sql="CREATE TABLE "
    "GenInf ( EmpName TEXT NOT NULL, Pyrll TEXT PRIMARY KEY,  "
    "DtBrth TEXT,  PlBrth TEXT, CID TEXT,  ContNo  TEXT,   "
    "JnDt TEXT,   Postn TEXT, Dept TEXT, AnnLv TEXT, "
    "EmrgLv TEXT, Irr TEXT, HmTwn TEXT, F1 TEXT, F2 TEXT ); "
    "CREATE TABLE Training( Pyrll TEXT NOT NULL, Crs TEXT, "
    "Dt TEXT, Plc TEXT, Cst TEXT);";

\改行の空白がより見やすくなり、自由にインデントできるため、解決策よりもこれを好みます。

于 2012-10-13T10:35:50.040 に答える
2

次のように記述できます。

const char * sql =
    "CREATE TABLE GenInf ( EmpName TEXT NOT NULL, Pyrll TEXT PRIMARY KEY,"
    "DtBrth TEXT,  PlBrth TEXT, CID TEXT,  ContNo  TEXT,   JnDt TEXT,   " 
    "Postn TEXT, Dept TEXT, AnnLv TEXT, EmrgLv TEXT, Irr TEXT, HmTwn TEXT, "
    "F1 TEXT, F2 TEXT ); "
    "CREATE TABLE Training( Pyrll TEXT NOT NULL, Crs TEXT, Dt TEXT, Plc "
    "TEXT, Cst TEXT);";
于 2012-10-13T10:36:52.327 に答える
1

2 つの方法があります。

1) 複数の文字列を記述し、C++ でそれらを 1 つの文字列としてリンクするだけです。

char* c =
    "1234567890"
    "ABCDEFGHIJK";
assert( strcmp(c, "1234567890ABCDEFGHIJK") == 0 );

2) 各行を a\で終了し、その後に a\n

char* c = "0123456789\
ABCDEFGHIJK";
assert( strcmp(c, "1234567890ABCDEFGHIJK") == 0 );

2 番目のケースでは、2 行目の前のスペースが文字列にマージされることに注意してください。

于 2012-10-13T12:06:33.120 に答える