将 main 的参数直接传递给编写函数
Pass argument of main directly to write function
我有一个 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]));
我什至不确定这是否会按预期工作。
是的,它可以工作,但稍作修改:
write(server_socket, argv[1], strlen(argv[1]));
由于 argv[1]
是指向 char
数组的指针,因此 sizeof
运算符将 return 您机器中指针的大小(即 8,如果您使用的是 64 位计算机)。相反,您应该使用 strlen
来获取要写入的字节数。
此声明
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));
我有一个 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]));
我什至不确定这是否会按预期工作。
是的,它可以工作,但稍作修改:
write(server_socket, argv[1], strlen(argv[1]));
由于 argv[1]
是指向 char
数组的指针,因此 sizeof
运算符将 return 您机器中指针的大小(即 8,如果您使用的是 64 位计算机)。相反,您应该使用 strlen
来获取要写入的字节数。
此声明
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));