问题标签 [null-terminated]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
55471 浏览

c - 末尾带有垃圾字符的字符串数组

我有一个 char 数组缓冲区,用于存储用户将一一输入的字符。我下面的代码有效,但有一些我无法弄清楚的小故障:

  1. 当我执行 printf 以查看 Buffer 中的内容时,它确实填满了,但最后我得到了垃圾字符
  2. 尽管被声明为 char Buffer[8],但它不会在 8 个字符处停止;

有人可以向我解释发生了什么,也许我该如何解决这个问题?谢谢。

输出:

tagBuffer 是 123456789!

0 投票
10 回答
475 浏览

c - 如何更安全地编写这个 C 片段?

我有以下 C 代码片段,必须识别错误并建议一种更安全的编写方法:

所以错误是 strlen 忽略'\0'了字符串的尾随,因此不会为副本分配足够的内存,但我不确定他们在更安全地编写它方面的目的是什么?

我可以使用malloc(strlen(somestring)+1))我假设,但我认为必须有比这更好的方法?


编辑:好的,我已经接受了一个答案,我怀疑我们不会期望 strdup 解决方案,因为它不是 ANSI C 的一部分。这似乎是一个相当主观的问题,所以我不确定我是否有接受其实是最好的。无论如何感谢所有的答案。

0 投票
10 回答
11374 浏览

c - 为什么以空字符结尾的字符串?或者:空终止与字符 + 长度存储

我正在用 C 编写语言解释器,我的string类型包含一个length属性,如下所示:

正因为如此,我不得不花很多时间在我的解释器中手动处理这种字符串,因为 C 不包含对它的内置支持。我考虑过切换到简单的以 null 结尾的字符串以符合底层 C,但似乎有很多理由不这样做:

如果您使用“长度”而不是查找空值,则内置边界检查。

您必须遍历整个字符串才能找到它的长度。

您必须做一些额外的事情来处理以空字符结尾的字符串中间的空字符。

以空字符结尾的字符串无法很好地处理 Unicode。

非空结尾的字符串可以实习更多,即“Hello, world”和“Hello”的字符可以存储在同一个地方,只是长度不同。这不能用空终止的字符串来完成。

字符串切片(注意:字符串在我的语言中是不可变的)。begin显然,第二个速度较慢(并且更容易出错:考虑end为两个函数添加错误检查)。

毕竟,我的想法不再是我是否应该使用以空字符结尾的字符串:我正在考虑为什么 C 使用它们!

所以我的问题是:我缺少的空终止有什么好处吗?

0 投票
2 回答
5027 浏览

sql - [My]SQL VARCHAR 大小和空终止

免责声明:总的来说,我对 SQL 和数据库非常陌生。


我需要创建一个最多可存储 32 个字符的文本数据的字段。“” 是否VARCHAR(32)意味着我的数据正好有 32 个字符?我是否需要为空终止保留一个额外的字符?

我进行了一个简单的测试,似乎这是一个所见即所得的缓冲区。但是,我想从真正知道自己在做什么的人那里得到具体的答案。


我有 C[++] 背景,所以这个问题在我脑海中敲响了警钟。

0 投票
5 回答
212 浏览

c - AC 风格的字符串文件格式难题

我对我遇到的这个小问题感到非常困惑。我有一个非索引文件格式标题。(更具体地说是 ID3 标头)现在,此标头存储一个字符串,或者更确切地说是三个字节,以确认数据实际上是一个 ID3 标记(TAG顺便说一句是字符串)。重点是,现在TAG文件格式中的 this 不是以空值结尾的. 所以有两件事可以做:

  • 使用 和加载整个文件以fread进行非终止字符串比较,请使用strncmp. 但:
    1. 这听起来很骇人听闻
    2. 如果有人打开它并试图在没有先验知识的情况下操纵字符串怎么办?
  • 另一种选择是加载文件,但 C 结构不应该完全映射到文件格式,而是包含适当的空终止符,然后应该使用唯一的调用加载每个成员。但是,这也感觉很hacky并且很乏味。

非常感谢您的帮助,尤其是有处理此类问题的实际经验的人的帮助。

0 投票
4 回答
5767 浏览

java - 用于零终止字符串的 Java BufferedReader

我需要从 Java 中的 InputStream 中读取以零结尾的字符串。

是否有类似于 BufferedReader.readLine() 方法来读取以零结尾的字符串?

0 投票
7 回答
1024 浏览

c - 在 GCC 中禁用字符串的 NUL 终止

是否可以在 GCC 中全局禁用以 NUL 结尾的字符串?

我正在使用自己的字符串库,我完全不需要最终的 NUL 字符,因为它已经在内部存储了适当的长度。

但是,如果我想附加 10 个字符串,这意味着在堆栈上不必要地分配了 10 个字节。宽字符串情况更糟:至于 x86,浪费了 40 个字节;对于 x86_64,80 字节!

我定义了一个宏来将这些堆栈分配的字符串添加到我的结构中:

使用sizeof(...) - 1效果很好,但我想知道是否可以摆脱 NUL 终止以节省几个字节?

0 投票
7 回答
102456 浏览

c++ - 什么是空终止字符串?

它与std::string有何不同?

0 投票
9 回答
8866 浏览

c - 为什么 C 中的字符串需要空终止?

只是想知道为什么会这样。我渴望了解更多关于低级语言的知识,而且我只了解 C 的基础知识,这已经让我感到困惑。

像 PHP 这样的语言会在解释和/或解析字符串时自动终止字符串吗?

0 投票
4 回答
37855 浏览

c# - 如何从 C# 字符串中获取以空字符结尾的字符串?

  • 我正在与需要空终止字符串的服务器通信
  • 如何在 C# 中巧妙地做到这一点?