我有两个预先填充的数组如下:
char *query1;
char *query2;
和一个由用户填充的数组。
char *username;
我想要做的是将这些组合成一个例如
char *SQLquery;
我尝试以这种方式使用strlen和strcat:
if (query==3) {
char *query1 = "SELECT * FROM Users WHERE UserName='";
char *username = "DEFSER"; //prefilled this for test purpuse
char *query2 = "'";
SQLquery = new char[strlen(query1)+strlen(username)+strlen(query2)+1];
*SQLquery = '/0';
strcat(SQLquery,query1);
strcat(SQLquery,username);
strcat(SQLquery,query2);
strcpy(laArray[0][2],SQLquery);
}
没有编译器错误但是当我打印我的laArray [0] [2]或我的SQLquery时它返回0。
我做错了吗?
答案 0 :(得分:1)
如果您打算使用C
,请使用以下
const char query1[] = "SELECT * FROM Users WHERE UserName='";
char *username = "DEFSER";
SQLquery = malloc(strlen(query1) + strlen(username) + strlen(query2) + 1 + 1);
sprintf("%s%s'", query1, username);
laArray[0][2] = SQLquery; /* Based on comments, I believe this is what you want to do */
...
/* Do whatever you want to do with laArray */
...
laArray[0][2] = NULL;
free(SQLquery);
SQLquery = NULL;
如果您打算使用C++
,请使用std::string
,如下所示
std::string SQLquery = "SELECT * FROM Users WHERE UserName='";
std::string username = "DEFSER";
SQLquery += username;
SQLquery += '\'';
laArray[0][2] = SQLquery; /* if laArray is 2D array of string, const_cast<char *>(SQLquery.c_str()) if it contains pointers */
/* Do whatever you want to do with laArray */
...
答案 1 :(得分:0)
不可能直接使用&#39; +&#39; C语言中的连接在C ++中你可以重载operator
,但使用std::string
会更加明智,它已经重载了operator+
然后从中提取c_str()
获得const char *
。
答案 2 :(得分:0)
我理解BLUEPIXY已经发现了真正的问题,但只是为了添加另一个选项,你可以使用sprintf_s(...)进行字符串连接,并可能提供更多的格式控制(如果需要的话)。 / p>
有关使用std :: string的建议(如果在C ++中):如果需要转换回旧的,则需要使用c_str()方法从std :: string访问char * -style C char string。
祝你好运。