将char缓冲区传递给函数

时间:2015-09-15 13:44:16

标签: c pointers

指针有问题。我的想法是将缓冲区传递给函数,以便将返回数据存储在此缓冲区中。但是,我不知道它是否会奏效。

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()中的数据吗?

3 个答案:

答案 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吗?