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

EDJ*_*EDJ 1 c c-strings sizeof strlen

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

main(int argc, char** argv) {

    ...

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

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

    ...

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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

如果我做这样的事情是否正确:

write(server_socket, argv[1], sizeof(argv[1])); 
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*cow 5

这个说法

write(server_socket, buff, sizeof(buff));
Run Code Online (Sandbox Code Playgroud)

和这个声明

write(server_socket, argv[1], sizeof(argv[1]));
Run Code Online (Sandbox Code Playgroud)

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

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

你需要的是

write(server_socket, argv[1], strlen( argv[1] ) );
Run Code Online (Sandbox Code Playgroud)

或者

write(server_socket, buff, strlen(buff));
Run Code Online (Sandbox Code Playgroud)