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)
我什至不确定这是否会按预期工作。
这个说法
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)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |