c - 当我的字符串有 4-5 个字符时,write() 会添加填充吗?

标签 c sockets

以下 write() 被客户端正确接收:

char *foo = "ABC";
write(sock, foo, strlen(foo));

但是当我将 foo 字符串扩展到 4 或 5 个字符时,write() 会用垃圾填充该字符串,直到它有 6 个字符。获得额外填充的写入示例:

char *foo = "ABCD";
write(sock, foo, strlen(foo));

有人知道为什么会发生这种情况吗?

最佳答案

我怀疑与所有其他人一样,您正在读取连接另一端的字符并使用 printf() 打印它们,它期望 nul 终止字节序列,即字符串,因此可以像这样编写 nul 字节

write(sock, foo, 1 + strlen(foo));

或者你在哪里收到它,这样做

int count;
char array[LARGER_THAN_POSSIBLE_COUNT];
count = read(sock, array, sizeof(array));
if (count > 0)
    fwrite(array, 1, count, stdout);
fprintf(stdout, "\n");

关于c - 当我的字符串有 4-5 个字符时,write() 会添加填充吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587296/

相关文章:

c - strcpy 传递初始化的空指针 c

c - 在 C 中迭代字符串 block 以构建新字符串的模式?

c - 向所有客户端发送套接字 udp c

c++ - 如何停止监听一个端口

c - 服务器没有在预期的位置监听

c - UNIX系统编程中的S_IFMT是什么?

C fwrite 写入额外的零

c - c 中的 IF 或 boolean 语句

angularjs - 可以更新各种范围的 Angular 和套接字

Java - 套接字在某些互联网上出现 'connection timed out error' 或 'no route to host' 错误