CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

请教一个char的问题

楼主riverofbird(riverofbird)2005-03-02 13:46:05 在 C++ Builder / 基础类 提问

代码中定义了一个  
  AnsiString   pContent="1234.56";  
  char   str[13];  
   
  程序中想将pContent值按一定规则赋到str中,如下:  
  sprintf(str,   "\x1b\x51\x41%8s\x0d",   pContent);  
   
  结果得到的str经常含有所需内容之外的内容,并且可能和所需内容完全不同,  
  不知道是不是str定义的方式不对?  
   
  我按照以前文章中说法,用memset或ZeroMemory等函数对指针预处理  
  char   *str   =   new   char[13];  
  ZeroMemory(str,13);  
  会报错"Access   violation   at   address   32657D07   in   module   'CC3260MT.DLL'.   Write   of   address   00000014". 问题点数:0、回复次数:9Top

1 楼riverofbird(riverofbird)回复于 2005-03-02 13:48:48 得分 0

是不是有参数能使定义后的char不受其他进程的访问?Top

2 楼holymoon858()回复于 2005-03-02 14:04:38 得分 0

是否#include   <stdio>Top

3 楼chiengod(钱神爷)回复于 2005-03-02 14:07:43 得分 0

试试  
  str[0]=0;   或  
  ZeroMemory(&str,sizeof(str));Top

4 楼fronm(时间)回复于 2005-03-02 14:49:18 得分 0

char数组,赋值要使用strcpy:  
  Top

5 楼riverofbird(riverofbird)回复于 2005-03-02 15:27:37 得分 0

str[0]=0甚至用循环来将str[i]赋值为0都不行.  
  用strcpy倒是可以赋值,但是在另一个函数中调用str的时候会报错.似乎还是不行Top

6 楼riverofbird(riverofbird)回复于 2005-03-03 15:01:23 得分 0

我的函数是这样子的,*************************以内的部分就是会出错的部分.  
  就是要调用api_com.dll中的函数Com_init(1,2400)来初始化com1,用Com_send(string,string_length)  
  来发送string到com1,用Com_rest()来关闭com1.  
   
  bool   __fastcall   TForm1::pCustDispString(AnsiString   pContent)  
  {  
          HINSTANCE   posapi;  
          AnsiString   dllFile="api_com.dll";  
          posapi=LoadLibrary(dllFile.c_str());  
          if(posapi   ==   NULL)  
          {  
                  Application->MessageBox("加载动态链接库   api_com.dll失败。","提示",MB_OK|MB_ICONINFORMATION);  
                  return   false;  
          }  
   
          FARPROC   cominit;  
          FARPROC   comrest;  
          FARPROC   comsend;  
   
          cominit=GetProcAddress(posapi,"com_init");  
          comrest=GetProcAddress(posapi,"com_rest");  
          comsend=GetProcAddress(posapi,"com_send");  
   
   
          bool   (*   Com_init)(int,DWORD);  
          bool   (*   Com_rest)();  
          bool   (*   Com_send)(char*,int);  
   
          Com_init   =   (bool(__cdecl   *   )(int,DWORD))cominit;  
          Com_rest   =   (bool(__cdecl   *   )())comrest;  
          Com_send   =   (bool(__cdecl   *   )(char*,int))comsend;  
   
          if   (Com_init(1,2400))  
          {  
                  Sleep(1);  
                  char   str[20];  
  //*************************************************************************************  
                  pContent=AnsiString::StringOfChar('   ',8-pContent.Length())+pContent;//+"   ";  
                  AnsiString   aa="\x1b",bb="\x51",cc="\x41",dd="\x0d",ee;  
                  ee=aa+bb+cc+pContent+dd;  
   
  //                 ZeroMemory(&str,sizeof(str));//memset(str,   0,   20);  
  //                 strcpy(str,ee.c_str());  
   
                  sprintf(str,   "\x1b\x51\x41%8s\x0d",   pContent.c_str());  
   
                  int   ii=strlen(str);  
   
                  if(!Com_send(str,ii))  
                          return   false;  
  //***********************************************************************************  
                  Com_rest();  
   
          }  
          else  
          {  
                  return   false;  
          }  
                  FreeLibrary(posapi);  
                  return   true;  
  }Top

7 楼kxj_72(kxj独孤求败)回复于 2005-03-03 17:04:06 得分 0

改用  
  memset(str,0,13);  
  试试Top

8 楼FreeFice(庄鱼)回复于 2005-03-04 13:21:33 得分 0

AnsiString   pContent="1234.56";//!!!  
  char   str[13];  
  sprintf(str,   "\x1b\x51\x41%8s\x0d",   pContent);//!!!  
  //------------------------------------------  
  sprintf(str,"\x1b\x51\41%8s\x0d",pContent.c_str());  
  Top

9 楼wilsonloveada(ada是MM)回复于 2005-03-04 13:46:26 得分 0

AnsiString   pContent="1234.56";  
  char   str[13];   可写成  
  char   str[13]={0};  
   
  sprintf(str,   "\x1b\x51\x41%8s\x0d",   pContent);//此函数没问题如果赋值不对,  
  检查语句。例:  
  sprintf(str,"%s,%02d",pContent,pContent.Length());     //肯定没问题!  
  Top

相关问题

  • char
  • char
  • LPCSTR --- LPCTSTR ---- CString --- char* ----char[] ---- CHAR ---- ???????????????????
  • CString and char *
  • string => char ...........
  • char[] to string
  • CString & char*
  • CString to char*
  • sizeof(char*)
  • CString->char* 或 char[] 、char*或char[]-->CString

关键词

  • 函数
  • 内容
  • pcontent
  • 赋值
  • sprintf
  • str
  • zeromemory
  • 问题
  • char

得分解答快速导航

  • 帖主:riverofbird

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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