一个指针的两行字符串

时间:2012-10-13 10:33:36

标签: c++ sql c sqlite

  

可能重复:
  How to split a string literal across multiple lines in 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);"; 

但它很长,我怎么能把它作为两条线?

3 个答案:

答案 0 :(得分: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);";

我更喜欢\解决方案,因为换行符中的空格更容易看到,您可以随意缩进。

答案 1 :(得分: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);";

答案 2 :(得分:1)

有两种方式:

1)只需将多个字符串和C ++链接在一起作为一个字符串:

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

2)使用\后跟\n

终止每一行
char* c = "0123456789\
ABCDEFGHIJK";
assert( strcmp(c, "1234567890ABCDEFGHIJK") == 0 );

请注意,在第二行中的空格将在字符串中合并!