注册 登录
编程论坛 C++教室

大侠们好,请教一个难题!!!为何还不能输出地址中的字符串

发布于 2010-05-17 15:42, 558 次点击
大侠们好,请教一个难题!!!为何还不能输出地址中的字符串
我已为 *zz=new char [200] ;分配了空间,,
我也为  zz=xx逐字复制  for( int i=0; i<100; i++ ){ zz=xx;}  
为何还不能输出字符串地址中的"AAAAA"
问题出在哪,请指教,谢谢 .  
char  *zz=new char [200] ;
char  yy0[100];//
char  yy1[100];//
        char  ee[100]="";//
//111----Get0-----------------------DLL-----------------------------------
MYLIBAPI_C int __stdcall Set0(char *xx,int a)//传入AAAAA字符串____ xx[0]={"AAAAA"} ;
{
        strcpy(yy0,xx);
return(a);//
}               
MYLIBAPI_C char* __stdcall Get0()// 传出____ xx[0]={"AAAAA"} ;---正确
{
return(yy0);//
}               
//===================================DLL===========================================================
MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){
   zz=xx;//
}
  return(a);//
}               
MYLIBAPI_C char* __stdcall Get(int a) //传出____ "(空)" 显示不正确,应该如何写,才能正确传出 "AAAAA"
    return(zz);//
}               

为何还不能输出字符串地址中的"AAAAA"
问题出在哪,请指教,谢谢

[ 本帖最后由 hz123 于 2010-5-17 17:27 编辑 ]
7 回复
#2
最近不在2010-05-17 16:57
第二个函数有输出语句,当然能输出,第四个函数没有输出,只是把zz作为函数的返回值。当然什么不显示,要想显示,自己加条输出语句,输出该函数,即返回值。
#3
2010-05-17 17:32
以下是引用最近不在在2010-5-17 16:57:33的发言:

第二个函数有输出语句,当然能输出,第四个函数没有输出,只是把zz作为函数的返回值。当然什么不显示,要想显示,自己加条输出语句,输出该函数,即返回值。
您好,<第二个函数有输出语句,当然能输出>,-----删除后照样输出正确,这是DLL,返回值是在应用软件中输出的,
关键是:
第二个函数传进的是字符串,
第四个函数传进的是地址,
为何还不能输出字符串地址中的"AAAAA"
问题出在哪,请指教,谢谢


[ 本帖最后由 hz123 于 2010-5-17 17:34 编辑 ]
#4
幽园香客2010-05-18 18:07
以下是引用hz123在2010-5-17 15:42:04的发言:

大侠们好,请教一个难题!!!为何还不能输出地址中的字符串
我已为 *zz=new char [200] ;分配了空间,,
我也为  zz=xx逐字复制  for( int i=0; i<100; i++ ){ zz=xx;}  
为何还不能输出字符串地址中的"AAAAA"
问题出在哪,请指教,谢谢 .  
char  *zz=new char [200] ;
char  yy0[100];//
char  yy1[100];//
        char  ee[100]="";//
//111----Get0-----------------------DLL-----------------------------------
MYLIBAPI_C int __stdcall Set0(char *xx,int a)//传入AAAAA字符串____ xx[0]={"AAAAA"} ;
{
        strcpy(yy0,xx);
return(a);//
}               
MYLIBAPI_C char* __stdcall Get0()// 传出____ xx[0]={"AAAAA"} ;---正确
{
return(yy0);//
}               
//===================================DLL===========================================================
MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){
   zz=xx;//
}
  return(a);//
}               
MYLIBAPI_C char* __stdcall Get(int a) //传出____ "(空)" 显示不正确,应该如何写,才能正确传出 "AAAAA"
    return(zz);//
}               

为何还不能输出字符串地址中的"AAAAA"
问题出在哪,请指教,谢谢
MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){   // 建议楼主仔细看下这部分代码,
   zz=xx;                       // 注意区分下指针赋值操作  *p1 = *p2  
                               //   和 p1 = p2 的区别
}
  return(a);//
}               


[ 本帖最后由 幽园香客 于 2010-5-18 18:13 编辑 ]
#5
2010-05-18 21:20
回复 4楼 幽园香客
谢谢您的帮助

MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){
       *zz=*xx;// 这样不行啊?
}
  return(a);//
}               
//===========================================
 MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
 {
 for( int i=0; i<100; i++ ){
 zz[i]=xx[i];//这样也不行啊?

 }
 return(a);//
 }               
#6
幽园香客2010-05-19 13:35
以下是引用hz123在2010-5-18 21:20:21的发言:

谢谢您的帮助

MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){
       *zz=*xx;// 这样不行啊?
}
  return(a);//
}               
//===========================================
 MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
 {
 for( int i=0; i<100; i++ ){
 zz=xx;//这样也不行啊?  
 }
 return(a);//
 }               
*zz=*xx    zz=xx;   //你想干嘛?每次循环都做同样的操作

 zz[i]= xx[i]; //指针此时如同数组名一样,可以直接使用
#7
fanfan3202010-05-19 15:19
//===================================DLL===========================================================
MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){
   zz=xx;//(注意这里,应改成 *zz=*xx
}
  return(a);//
}               
MYLIBAPI_C char* __stdcall Get(int a) //传出____ "(空)" 显示不正确,应该如何写,才能正确传出 "AAAAA"
    return(zz);//
}               
#8
2010-05-19 16:19
以下是引用fanfan320在2010-5-19 15:19:43的发言:

//===================================DLL===========================================================
MYLIBAPI_C int __stdcall Set(char *xx,int a)//传入AAAAA字符串的地址_____ xx[]={"AAAAA"} ;
{
  for( int i=0; i<100; i++ ){
   zz=xx;//(注意这里,应改成 *zz=*xx)
}
  return(a);//
}               
MYLIBAPI_C char* __stdcall Get(int a) //传出____ "(空)" 显示不正确,应该如何写,才能正确传出 "AAAAA"
    return(zz);//
}               
谢谢您的帮助,您的建议同6楼,不行的!
以下是我的实现代码:(是一种类似的C语言的软件)
#import "ABC.dll"
string  Get0();
string  Get(int);
int     Set0(string,int);  
int     Set(string& ar[],int);//
#import
//--------------------------------------
int start(){
  int a=1;
  string xx[]={"AAAAA"} ;
  Set0(xx[0],a);      
Set(xx,a);      
   Print(
            "\n  Get0()===== ",Get0(),//传出____ xx[0]={"AAAAA"} ;---正确
            "\n  Get()====== ",Get(a)////传出____={"      ?????"} ;---不正确
             );
    return (0);
   }
以上我的传入代码:是一种类似的C语言的软件,按照我的意思,分别调试:
1.传入是Set0(xx[0],a);  //传出____ xx[0]={"AAAAA"} ;---正确     
2.传入是Set(xx,a);  )////传出____={"      ?????"} ;---不正确   
另外能否将:

int start(){
  int a=1;
  string xx[]={"AAAAA"} ;
  Set0(xx[0],a);  
  Set(xx,a);  
   Print(
            "\n  Get0()===== ",Get0(),  
            "\n  Get()====== ",Get(a)
             );
    return (0);
   }

帮忙写成一个简单的:ABC.exe,让我也可验证一下,传出的究竟是什么???不胜感激,谢谢了.
1