如何将const char连接到const char?

问题描述:

我需要建立一个const char其他const char的字符串?如何将const char连接到const char?

const char *sql = ""; 
const char *sqlBuild = ""; 

for(int i=0; i < ac_count; ++i) { 

    if (![sqlBuild isEqualToString:@""]) { 
    sqlBuild = [sqlBuild stringByAppendingString: 
      [NSString stringWithUTF8String:@" UNION "]]; 
    } 
    sql = [[NSString stringWithFormat: 
     @"select sum(price) from tmp%d where due >= date() and due <= '%@'", 
      i, strDBDate] cStringUsingEncoding:NSUTF8StringEncoding]; 

    sqlBuild = [sqlBuild stringByAppendingString: 
     [NSString stringWithUTF8String:sql]]; 
} 

//execute sql 

我已经尝试过几次,但不能完全正确,继承人是我的最后一次尝试。正如你可以看到我试图建立一个SQL语句。

我哪里错了?

编辑 - 我正在使用不喜欢NSString的sql lite,见下文。

- (NSString*)getCategoryDesc:(int)pintCid { 

NSString *ret = @""; 
const char *sql = "select category from categories where cid = ?"; 

sqlite3 *database; 
int result = sqlite3_open([[General getDBPath] UTF8String], &database); 
if(result != SQLITE_OK) 
{ 
    DLog(@"Could not open db."); 
} 

sqlite3_stmt *statementTMP; 

int error_code = sqlite3_prepare_v2(database, sql, -1, &statementTMP, NULL); 

if(error_code == SQLITE_OK) { 

    sqlite3_bind_int(statementTMP, 1, pintCid); 

    if (sqlite3_step(statementTMP) == SQLITE_ROW) { 
     ret = [[NSString alloc] initWithUTF8String: 
      (char *)sqlite3_column_text(statementTMP, 1)]; 
    } 
} 
sqlite3_finalize(statementTMP); 
sqlite3_close(database); 


return [ret autorelease]; 
} 

有到转换没有任何好处,然后从一个UTF8字符串;在NSString中做所有事情并在最后将其转换为C风格的字符串会更有效率。 @"d"语法也评估为一个对象,而不是C风格的字符串。

所以,你应该简化并更正代码:

NSMutableString *sqlStatement = [NSMutableString string]; 

for(int i=0; i < ac_count; ++i) { 

    if ([sqlStatement length]) [sqlStatement appendString:@" UNION "]; 

    [sqlStatement appendFormat: 
     @"select sum(price) from tmp%d where due >= date() and due <= '%@'", 
      i, strDBDate]; 

} 

// execute SQL string [sqlStatement UTF8String] 
+0

我使用SQLite,见上面,它不喜欢的NSString – Jules

+0

就是为什么我说,执行[sqlStatement UTF8String],它返回一个C风格的字符串。 – Tommy

申报sqlBuildNSMutableString并用它来建立你的字符串:

NSMutableString *sqlBuild = [NSMutableString string]; 
for (...) { 
    [sqlBuild appendString:...]; 
} 
+0

见编辑,SQLite不喜欢的NSString的 – Jules