直接将main参数传递给write函数

时间:2019-12-23 16:21:03

标签: c sizeof c-strings strlen

我有C程序,该程序已经接受了一个参数,将其存储到缓冲区中,然后将其传递给写函数:

main(int argc, char** argv) {

    ...

    char buff[1000];
    strcpy(buff, argv[1]);

    write(server_socket, buff, sizeof(buff));     

    ...

    return 0;
}

如果我执行我的代码./testCode "equinox“,equinox将存储在缓冲区中,然后将缓冲区传递给write()函数。在这种情况下,一切都会按预期进行。

有没有一种方法可以跳过将参数存储在缓冲区中的部分,然后将其传递给write()的方法?

如果我这样做,是否正确?

write(server_socket, argv[1], sizeof(argv[1])); 

我什至不确定这是否能按预期工作。

2 个答案:

答案 0 :(得分:5)

此声明

write(server_socket, buff, sizeof(buff));

这句话

write(server_socket, argv[1], sizeof(argv[1]));

都不正确,因为它们没有正确指定要写入的字节数。

在第一种情况下,字符串的大小可以小于buff的大小。在第二种情况下,使用的指针大小等于4或8个字节。

您需要的是

write(server_socket, argv[1], strlen( argv[1] ) );

write(server_socket, buff, strlen(buff));

答案 1 :(得分:1)

,它可以工作,但稍作修改:

write(server_socket, argv[1], strlen(argv[1]));

由于argv[1]是指向char数组的指针,所以sizeof运算符将返回计算机中指针的大小(如果您使用的是指针,则返回8。 64位计算机)。相反,您应该使用strlen来获取要写入的字节数。