C 对传入字符串的字符串操作

标签 c string sockets

我是 C 语言新手,想知道如何做这样的事情:

我有一个字符串通过套接字传入(可能会有所不同)

"GET OK 1045 \r\nTHE RED RIDING HOOD"

现在我可能会得到它的大块,而不是完全像

"GET OK 10"

然后

"45 \r\nTHE RED RIDING HOOD"

当它找到 \r\n 并将其之前的内容存储在一个变量中并将其之后的内容存储在另一个变量中时,最好的分割方式是什么。

我尝试过 strtok() 但它变得很困惑并且出现错误

我尝试了sscanf(),但由于我可能会得到 block ,所以我永远无法让它将其正确格式化到我的变量中。我确信有一种简单的方法可以在 while 循环中做到这一点,但 split 才是让我困扰的原因。

 while((items_read = read(sock, stories_buffer, BUF_SIZE)) > 0) {
     //how do i check on stories_buffer as it comes and split it based on delimiter \r\n
 }

最佳答案

您可以将套接字包装到缓冲 IO 中,并在其上使用诸如 fgets() 之类的 stdio 函数:

FILE *f = fdopen(sockfd, "w");
fgets(buf, sizeof(buf), f);

这应该是基于线路的网络协议(protocol)的最佳选择。

关于C 对传入字符串的字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59824638/

相关文章:

c - 在C中一次读取一个字段的二进制文件

c++ - 打印从 Python 传递的 char 指针数组的问题

java - 客户端/服务器套接字 Java(模式 MVC)未向客户端发送正确的信息

java - 为什么 SocketChannel 是抽象的?

c++ - OpenSSL "No Shared cipher"

c - 如何增加我想要操作的数组 block

C 程序循环数组旋转因超时而终止

string - Julia 中不区分大小写的字符串比较

C:将 uint8 数组转换为包含其字节的十六进制表示形式的字符串

python - python中列表的排序列表