main直接将参数传递给写入函数

问题描述 投票:1回答:2

我有已经接受参数的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])); 

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

c sizeof c-strings strlen
2个回答
3
投票

此声明

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
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.