首页 > 解决方案 > 直接将main的参数传递给编写函数

问题描述

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

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

标签: csizeofc-stringsstrlen

解决方案


这个说法

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));

推荐阅读