C中有如下一段程序:
memmove(pdata, bcp_msg->MsgBody.BCP_DATA_IND_T.pData, bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength);
memmove(pdata+bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength, "\0", 1);
其中pdata为一指针,bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength返回一个整数。
如果用Delphi实现,
是不是应该先在pdata-1处存入bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength设置字符串长度,然后在pdata处拷贝bcp_msg->MsgBody.BCP_DATA_IND_T.pData?
还是在pdata处拷贝bcp_msg->MsgBody.BCP_DATA_IND_T.pData后再往pdata+bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength写入字符串结束符?
请高手指教。
memmove(pdata, bcp_msg->MsgBody.BCP_DATA_IND_T.pData, bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength);
memmove(pdata+bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength, "\0", 1);
其中pdata为一指针,bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength返回一个整数。
如果用Delphi实现,
是不是应该先在pdata-1处存入bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength设置字符串长度,然后在pdata处拷贝bcp_msg->MsgBody.BCP_DATA_IND_T.pData?
还是在pdata处拷贝bcp_msg->MsgBody.BCP_DATA_IND_T.pData后再往pdata+bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength写入字符串结束符?
请高手指教。
解决方案 »
- 请问我为什么不能向数据库插入数据??
- ToxMenu出自那个组件?
- 怎么截取DateTimePicker1的年份+edit1.text形成另一个文本?
- Refresh问题
- appand 和insert into 加入记录有什么区别
- 加入者有分:怎么用程序获取USB摄像头的图像
- dephi中的指针移动是Pointer+1吗?(在线等待)
- 窗口显示
- 正如C++可以用BCB,VC,VS.NET,Dev-C++等众多开发工具,Delphi只有这一种开发工具吗???
- 我现在正在学习Delphi,但我不知道以后的路该怎么走?该学什么?
- edit或lable如何显示带有小数点
- 请教类似迅雷右下角广告弹出怎么做?
从pdata开始, 复制bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength个字节的数据到 bcp_msg->MsgBody.BCP_DATA_IND_T.pData。memmove(pdata+bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength, "\0", 1);
在pdata往后bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength字节处, 写入一个字节的内容,内容为0。
我记得"\0"在C中表示字符串结束符……
话说回来,这段c程序也够差的了,可能现在的c编译器已经聪明到那1byte不用再调用一次函数了吧,delphi可做不到*(pdata+bcp_msg->MsgBody.BCP_DATA_IND_T.uiLength)=0; /* 在c里不用区分0和'\0' */如果能保证bcp_msg->MsgBody.BCP_DATA_IND_T.pData是个以'\0'结尾的字符串的话,传长度的时候直接+1,或者直接用strncpy而不是memmove
String的0位置是不可访问的,但小弟不知道在写入时这一位是不是要自己给出值?
1. 在c里,'\0'和"\0"是有区别的,"\0"从不是c中“字符串”的结尾;另外,在c中'\0'和0是没区别的
2. 早期pascal的string(相当于现在delphi里的ShortString)的确不会加一个#0,但long string(AnsiString/WideString以及d2009的UnicodeString)为了方便向winapi传递参数,也会在long string的末尾加上一个#0,但不计入string长度,而且这个字符的位置完全可以正常访问
谢谢你的指点,我有点明白了。
但是如你所说,"\0"是一个有两个字符{'\0', '\0'}的常量数组,我还不太明白,能再解释一下。在Delphi中对应什么呢?