CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

两个char* 声明的字符串如何连接呢?

楼主chun79(呆头鹅)2005-03-08 14:38:51 在 C/C++ / C++ 语言 提问

代码片断:  
  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

相关问题

  • 连接字符串
  • 连接字符串
  • 字符串连接
  • 连接字符串
  • 字符串连接
  • 字符串连接问题
  • 字符串的连接
  • ?ODBC连接字符串
  • 字符串连接问题
  • 请教:字符串连接

关键词

  • 连接
  • 指针
  • 函数
  • 执行
  • 语句
  • 转换
  • testchar1
  • testchar
  • chaxun
  • marctext

得分解答快速导航

  • 帖主:chun79
  • LoveSnowV

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo