通过套接字tcp发送带有空格的字符串

时间:2017-12-02 15:20:28

标签: c sockets getline

我试图从客户端向服务器发送一条从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是由我定义的实际发送和recv,100%工作

的功能

问题出在getline上,但效果不正确。 当我输入"你好香蕉"之后我打印Sending: %s我总是得到像��这样的奇怪的字符,在这里我甚至无法显示..

你能帮助我吗?

编辑:现在感谢@dbush

1 个答案:

答案 0 :(得分:1)

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

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

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