请原谅我,如果我听起来很愚蠢,但我是一名生物学专业的学生,最终从事软件开发工作(从未在编码方面有过一门专业)。所以编码不是我的强项,但我真的想学习。
现在已经不在了:指针。
我正在用Visual C ++编写一个用于串行通信的应用程序,并且花了最后三天努力输出正确的数据。
这是相关的代码块:
//The ports have been opened, data has been written and the rest follows
//Initialising buffer
DWORD dwBytesRead = 0;
BYTE* abBuffer = NULL; // Instance 1
do
{
// Read data from the COM-port
serial2.Read(&abBuffer,sizeof(&abBuffer),&dwBytesRead); // Instance 2
if (dwBytesRead > 0)
{
CString a=(LPCTSTR)&abBuffer;//To check what is being read
SetDlgItemText(IDC_RECV,(LPCTSTR)&abBuffer);
}
else
MessageBox("No");
}
while (dwBytesRead == sizeof(&abBuffer));
//delete[] abBuffer;
//Close the port again
调试时我可以看到实例1“abBuffer”是
abBuffer 0xcccccccc unsigned char *
在实例2中它是
abBuffer 0x00000000 unsigned char *
我知道实例1的值是一个模式代码,因为我在该行之前放置了一个断点,2是NULL, ,但为什么坏指针? < / p>
我收到的数据也很奇怪。
尝试1:
已发送数据:“hi”
收到的数据:“hiÜÜÌÌÌÌÌÌ”
尝试2:
发送数据:“hihihi”
收到的数据:“hiÜÜÌÌÌÌÌÌ”
尝试3: 检查数据的哪一端被剪切
已发送数据:“aibicidi”
收到的数据:“cidiÌÌÌÌÌ”
else子句触发 为什么?
尝试4: 要检查截止是什么,结果是4个字节
已发送数据=“迈克”
收到数据=“mikeÌÌÌÌÌ”
else子句触发
为什么我的数据可能会出现乱码?
有三个主要问题,但它们是相关的,这就是我在这里的原因。
帮助?
答案 0 :(得分:1)
你有多个问题。从abBuffer
开始是一个空指针。您无法将数据写入指向的位置。其次,&abBuffer
为您提供指向变量 abBuffer
的指针。
第一个问题的解决方案是为abBuffer
分配内存以指向。这是最简单的方法,使用数组而不是指针。
第二个问题的解决方案是不使用address-of运算符,而是使用plain abBuffer
。