指针有问题。我的想法是将缓冲区传递给函数,以便将返回数据存储在此缓冲区中。但是,我不知道它是否会奏效。
void main()
{
char *buf = malloc(sizeof(char) *buf);
memset(buf, 0x00, BUF_SIZE);
sendCommand(buf);
}
sendCommand(char *buf)
{
write(fd, "some commands", strlen("some commands"));
readResponse(buf);
}
readResponse(char *buf)
{
read(fd, buf, nbytes);
}
我知道到目前为止还没有错误处理。而且一些变量没有明确定义。它只取决于传递缓冲区。我会在主函数中看到readResponse()中的数据吗?
答案 0 :(得分:3)
在readResponse()
中,当您将nbytes
读入buf
指向的缓冲区时,您将在main
中获取该数据。
要做的一些改进 -
1。 void main()
- > int main(void)
或int main(int argc, char *argv[])
2。 char *buf = malloc(sizeof(char) *buf);
- > char *buf = malloc(BUF_SIZE); // sizeof(char)=1
或者你想要的东西(不确定你想要什么?)
注意 - 请记住free
分配的内存。
答案 1 :(得分:1)
您提供的代码中存在大量重大问题,考虑到它有多短。但是,其他答案已经解决了这些问题,而你的问题实际上并不是关于它们中的任何一个:
我会在主函数中看到readResponse()中的数据吗?
是的,前提是参数buf
是指向足以容纳nbytes
字节的数组的指针,并且read()
调用实际上成功读取了任何字节,那么这些字节将在之后通过传递给main()
的指针在readResponse()
中可见。更一般地说,如果将指针作为函数参数传递,则被调用函数可以操作指向对象,包括修改非const
的那些部分。这就是read()
函数本身能够将它读取的字节存储到缓冲区中的方式。
答案 2 :(得分:0)
这不符合你的想法:
char *buf = malloc(sizeof(char) *buf);
您的意思是乘以BUF_SIZE
吗?