回 帖 发 新 帖 刷新版面

主题:请高手指点代码

[code=c]
typedef struct  
{
public:
    char Port[4];
    short BaudRate;
}SerialParam;

int test()
{
    SerialParam* a = (SerialParam*)malloc(sizeof(SerialParam));
    memcpy(a->Port,"COM1",4);
    a->BaudRate = 9600;

    CString b;
    b.Format("%s",a);

    SerialParam *c =NULL;
    c = (SerialParam*)(LPCSTR)b;
    TRACE("%s",c->Port);
    TRACE("%d",c->BaudRate);
    return 0;
}
[/code]

C->PORT 的值出现了问题,是否一定要将两个值分开传呢?请指点我的思想哪里有问题。

回复列表 (共4个回复)

沙发

"COM1"实际上占用的是5个字符,C、O、M、1、\0。
你把char Port[4]改为5试试……

板凳

[quote]"COM1"实际上占用的是5个字符,C、O、M、1、\0。
你把char Port[4]改为5试试……[/quote]
我试过了,当Port[4]改为Port[5]时,在CString赋值的过程就会出错,个人认为
在Format时会因‘\0’而出错。

3 楼

楼主,你这段代码想实现什么功能?

 memcpy(a->Port,"COM1",4);
这句有问题了。"COM1"占5个字符的数组

4 楼

最大的问题是这儿:
CString b;
b.Format("%s",a);

a是SerialParam类型的指针,转换成CString类型的b,再转成SerialParam类型的c,你到底想干啥呐?

如果你想做SerialParam类型和CString的互转,也应该SerialParam类里写转换函数(如果你喜欢用struct,也可以有成员函数,但typedef看着真难受),不是用format做转换。

也许你只是想学学C++,但是这句c = (SerialParam*)(LPCSTR)b;真是不知所云,是都是指针,但没这么做法的,所以加不加‘\0’都是错,因为整个做法错了

我来回复

您尚未登录,请登录后再回复。点此登录或注册