c - 嵌入式域中 strlen() 的缺点

标签 c string network-programming embedded

使用 strlen() 有哪些缺点?

如果有时在 TCP 通信中字符串中出现 NULL 字符,那么我们会发现字符串的长度最多只能为 NULL 字符。

我们无法找到字符串的实际长度。

如果我们对此 strlen 函数进行其他替代,它也会停止在 NULL 字符处。那么我可以使用哪种方法来找出 C 中的字符串长度

最佳答案

要读取“TCP 通信”,您可能正在使用readread 的原型(prototype)是

ssize_t read(int fildes, void *buf, size_t nbyte);

返回值是读取的字节数(即使它们是0)。
因此,假设您要读取 10 个字节,所有字节均为 0。您有一个足以容纳所有数据的数组

int fildes;
char data[1000];
// fildes = TCPConnection
nbytes = read(fildes, data, 1000);

现在,通过检查 nbytes 你知道你已经读取了 10 个字节。如果您检查 data[0]data[9],您会发现它们有 0

关于c - 嵌入式域中 strlen() 的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173017/

相关文章:

c - 如何对 __m128 类型变量中的浮点元素求反(更改符号)?

c - "Connected"UDP套接字,双向通信?

c - 当我访问超出我分配的内存时,为什么我没有收到堆栈粉碎错误?

c++ - 如何使用 boost::lexical_cast 和 std::boolalpha?即 boost::lexical_cast< bool > ("true")

c - 在文本中搜索字符 block (单词)

android - 在 Java 中重新格式化字符串

c# - 什么时候选择套接字编程而不是 WCF?

.net - 如何识别网络接口(interface)是 LAN、Wifi 还是外部

c - 从struct sk_buff中提取数据

将 uint32_t 转换为 int32_t 并随后比较它们