通过套接字 tcp 发送一个带有白色 space 的字符串

Send a string with white space through socket tcp

我正在尝试从客户端向服务器发送一整行,该行是从 bash.

中读取的

客户:

char buf[200];
int line_len;
getline(&buf, &line_len, stdin);
printf("Sending: %s", buf);
sendl(tcp_sock, buf);

服务器:

char app[200];
recvl(client, app);
printf("\n%s\n", app);

Sendl 和 recvl 是我定义的函数,实际发送和接收,工作 100%

问题出在 getline 上,它无法正常工作。 当我在输入 "hello banana" 后打印 Sending: %s 时,我总是得到像 �� 这样的奇怪字符,在这里我什至无法显示..

你能帮帮我吗?

编辑:感谢@dbush

现在开始工作

getline 函数需要一个 char ** 作为它的第一个参数。您传递的是 char [200],它会衰减为 char *。这些类型不兼容,您的编译器应该警告过您。

您需要为第一个参数传递指针变量的地址。该指针应初始化为 NULLlinelen 应初始化为 0。然后 getline 将为读取的行分配内存。完成此缓冲区后,您应该 free 它:

char *buf = NULL;
int line_len = 0;
getline(&buf, &line_len, stdin);
buf[line_len] = '[=10=]';
printf("Sending: %s", buf);
sendl(tcp_sock, buf);
free(buf);