如何组合字符数组char * foo =(char * bar1 + char * bar2 + char * bar3)

时间:2014-05-23 08:12:17

标签: c++ arrays

我有两个预先填充的数组如下:

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。

我做错了吗?

3 个答案:

答案 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。

祝你好运。