两个char* 声明的字符串如何连接呢?
代码片断:
char * testchar1;
testchar1="select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%";
const char * testchar3=chaxun;//chaxun为char* 已经赋值
const char * testchar2="%')";
testchar1=strcat(testchar1, testchar3);//连接 ,执行到此发生错误,写入冲突。
testchar1=strcat(testchar1, testchar2);//连接
重要声明:编译没有问题
在线等待,问题解决立即结帖!
问题点数:20、回复次数:13Top
1 楼blow_jj(阿俊)回复于 2005-03-08 14:41:03 得分 0
可以用(String)强制转换为String类型然后用+连接Top
2 楼blow_jj(阿俊)回复于 2005-03-08 14:43:49 得分 0
try
const String a= (String)testchar3;
const String b= (String)testchar2;
String c=a+b;
/////////////////////////////////////////////////////////////////////
欢迎大家使用编程文档手册V3.5,编程辅助类软件
下载:http://www.skycn.com/soft/11906.htmlTop
3 楼winstonch()回复于 2005-03-08 14:44:40 得分 0
testchar3指向了一个静态数据区,静态数据区是禁止写的Top
4 楼CMyMfc(星际人生:=E.F=FlyForEver)回复于 2005-03-08 14:48:19 得分 0
将char testchar1[MAX_PATH] = ="select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%";
Top
5 楼chun79(呆头鹅)回复于 2005-03-08 14:51:15 得分 0
首先感谢大家回复!
第一,我不能转换为string处理,因为接下来的调用需要使用char*,所以否定1、2楼
第二,我并没有写入testchar3,否定三楼;
Top
6 楼chun79(呆头鹅)回复于 2005-03-08 14:54:01 得分 0
关于四楼,如果我将定义改为:char testchar1[MAX_PATH] =。。。。。
后面的字符串连接函数连编译也无法通过了Top
7 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-03-08 14:55:12 得分 0
testchar1的长度必须足够大,否则容不下连接之后的。
可以尝试CMyMfc(星际人生:=E.F=FlyForEver)的Top
8 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-03-08 14:57:15 得分 0
#include <iostream>
using namespace std;
#define MAXSIZE 500
int main()
{
char *chaxun="ddd";
char testchar1[MAXSIZE]="select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%";
const char * testchar3=chaxun;//chaxun为char* 已经赋值
const char * testchar2="%')";
strcat(testchar1, testchar3);//连接 ,执行到此发生错误,写入冲突。
strcat(testchar1, testchar2);//连接
cout<<testchar1<<endl;
system("pause");
} Top
9 楼LoveSnowV(LoveSnowV)回复于 2005-03-08 15:18:41 得分 20
#include <stdio.h>
#include <string.h>
int main()
{
char testchar1[256];
char * chaxun ="LoveSnowV";
strcpy(testchar1, "select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%") ;
//testchar1="select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%";
const char * testchar3=chaxun;//chaxun为char* 已经赋值
const char * testchar2="%')";
//testchar1=strcat(testchar1, testchar3);//连接 ,执行到此发生错误,写入冲突。
strcat(testchar1, testchar3);//连接 ,执行到此发生错误,写入冲突。
//testchar1=strcat(testchar1, testchar2);//连接
strcat(testchar1, testchar2);//连接
return 0 ;
}
/*
首先testchar1定义不能用指针,要使用数组。或者使用new来动态分配空间,
否则,只有指针没有空间,那怎么将连接好的字符串拷贝进去。
第二,testchar1 = "select ...." ;这样只是将指针赋到一个地址上,而这个地址后面的
空间是const是不可以改变的(隐含)。所以在进行strcat 时,因为是const,所以就会冲突
这里要用数组,或动态分配好空间,再用strcpy来复制进去值。
第三,strcat这个函数只要有两个参数就可以了。用testchar1也行,但我改动后这个testchar1
是一个const时,不能修改了,如果是动态的,也没必要再使用返回值,所以像上面那样写
在一般的情况下就可以了,特殊情况,将来再特殊对待就可以了。
*/
Top
10 楼chun79(呆头鹅)回复于 2005-03-08 15:29:35 得分 0
感谢 LoveSnowV(LoveSnowV) (
我按照您说的需进行了修改
系统编译错误提示如下:
: error C2664: “strcat” : 不能将参数 1 从“char *[300]”转换为“char *”
Top
11 楼chun79(呆头鹅)回复于 2005-03-08 15:33:35 得分 0
编译通过
谢谢Top
12 楼chun79(呆头鹅)回复于 2005-03-08 15:36:37 得分 0
感谢 LoveSnowV(LoveSnowV)
问题已经解决
原来是我不小心多写了一个*
本贴最终为LoveSnowV(LoveSnowV)解决
引用如下:
#include <stdio.h>
#include <string.h>
int main()
{
char testchar1[256];
char * chaxun ="LoveSnowV";
strcpy(testchar1, "select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%") ;
//testchar1="select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%";
const char * testchar3=chaxun;//chaxun为char* 已经赋值
const char * testchar2="%')";
//testchar1=strcat(testchar1, testchar3);//连接 ,执行到此发生错误,写入冲突。
strcat(testchar1, testchar3);//连接 ,执行到此发生错误,写入冲突。
//testchar1=strcat(testchar1, testchar2);//连接
strcat(testchar1, testchar2);//连接
return 0 ;
}
/*
首先testchar1定义不能用指针,要使用数组。或者使用new来动态分配空间,
否则,只有指针没有空间,那怎么将连接好的字符串拷贝进去。
第二,testchar1 = "select ...." ;这样只是将指针赋到一个地址上,而这个地址后面的
空间是const是不可以改变的(隐含)。所以在进行strcat 时,因为是const,所以就会冲突
这里要用数组,或动态分配好空间,再用strcpy来复制进去值。
第三,strcat这个函数只要有两个参数就可以了。用testchar1也行,但我改动后这个testchar1
是一个const时,不能修改了,如果是动态的,也没必要再使用返回值,所以像上面那样写
在一般的情况下就可以了,特殊情况,将来再特殊对待就可以了。
*/
Top
13 楼LoveSnowV(LoveSnowV)回复于 2005-03-08 15:41:50 得分 0
/**************************************************************************
* 操作系统 Windows XP Professional SP2
* 开发环境 Visual Studio.NET 2003
* 注释: 如果我没有猜错,你可能就是要构造一个SQL语句,只是这个语句中的
* 一些值要用参数传进去。那我下面的小程序也是演示的这个功能,可能
* 和你要的功能不太一样,但算是抛砖引玉吧。演示一个思路。
* 祝你好运!
**************************************************************************/
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
char szSQL[256] ; //一般的SQL语句够用了
char *pValues = "dukejoe" ; // 假定这是要替换的值
wsprintf(szSQL,
"select zskid,marctext from zmarc where zskid in (select zskid from ztitle where title = '%%%s%%')",
pValues) ;
printf("%s", szSQL) ;
return 0 ;
}
Top




