通过套接字 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 *
。这些类型不兼容,您的编译器应该警告过您。
您需要为第一个参数传递指针变量的地址。该指针应初始化为 NULL
,linelen
应初始化为 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);
我正在尝试从客户端向服务器发送一整行,该行是从 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 *
。这些类型不兼容,您的编译器应该警告过您。
您需要为第一个参数传递指针变量的地址。该指针应初始化为 NULL
,linelen
应初始化为 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);