请教一个char的问题
代码中定义了一个
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




