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);"; 

但它很长,我怎么能把它放在两行?

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++ 将它们链接为一个字符串:

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

2) 以 a 结尾\,后跟 a\n

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

请注意,在第二种情况下,第二行之前的空格将被合并到字符串中!

于 2012-10-13T12:06:33.120 回答