我试图从客户端向服务器发送一条从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
答案 0 :(得分:1)
getline
函数需要char **
作为其第一个参数。您反而传入的char [200]
会衰减到char *
。这些类型是不兼容的,您的编译器应该已经警告过您。
您需要为第一个参数传递指针变量的地址。该指针应初始化为NULL
,linelen
应初始化为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);