问题标签 [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 投票
5 回答
36264 浏览

c++ - C ++:将读取的二进制文件存储到缓冲区中

我正在尝试读取二进制文件并将其存储在缓冲区中。问题是,在二进制文件中有多个以空字符结尾的字符,但它们不在末尾,而是在其他二进制文本之前,所以如果我将文本存储在 '\0' 之后,它只会将其删除缓冲。

例子:

这只会输出:this is a

这是我的真实代码:

此函数读取一个字符

这就是我使用它的方式:

0 投票
3 回答
106 浏览

c - 将空终止符视为 C 中的常规字符

我想将 char[] 中的所有字符复制到另一个 char[]。但是,假设有一个 '\0' 那么我想把它当作一个普通字符——如果你愿意的话。因此,当我打印出带有格式说明符 %s 的 char[] 时,它不应该停在中间。例如

有没有办法做到这一点?

0 投票
3 回答
13339 浏览

c - 删除尾随 NULL 终止符

我有一个用 0 填充的大型 char 数组。我从套接字读取传入文件并将其内容放在缓冲区中。我无法写入包含所有 '\0' 的缓冲区,因此我分配了一个具有正确大小的新缓冲区并进行写入。我使用这种方法来做到这一点:

虽然这种方法有效,但它似乎不是最聪明或最优雅的方法。从 char 数组中删除所有尾随 NULL 字符的最佳方法是什么?

0 投票
0 回答
67 浏览

c - 部分前缀空终止字符串

是否使用 NULL 终止字符串 (SZ) 或长度前缀字符串 (LPS) 似乎是一个热门话题。确实,我们甚至在这里对这个话题提出了问题

所以我发生了一些事情。我们可以两者都用一点吗?我的意思是,很明显,你不能制作一个 LPS & SZ (LPSZ?) 字符串而不删除其中一个或另一个的一些很棒的东西。

然而,关于 SZ 的最大抱怨似乎是操作所需的时间,因为字符串长度测量需要很长时间。我对此有一个想法:

使所有字符串 SZ。但是,我们也可以将字符串 mod 256 的长度(即:)存储在字符串len % 256前面的单个字节中。虽然它不会降低操作的复杂性,但它可能会显着提高速度,代价是增加一个字节。

以下是该方案的主要优点:

  1. 不限于任何特定尺寸
  2. 比普通 SZ 更快(高达 256 倍)
  3. 兼容所有不同的内存大小
  4. 小字符串仍然非常节省空间(没有浪费的字节len
  5. 没有字节顺序问题
  6. 可跨机器移植(见 3 和 5)

这就是strlen ()在这个方案下的样子(显然,你会用别的名字命名它,因为你会创建一个不同的库):

一个合适的名称可能是 PPSZ(部分前缀空终止字符串)。


对我来说,这似乎是一个合理的权衡:一个字节用于相当大的加速度。当然,有人可能会问:为什么不是两个、四个或八个字节呢?我的回答是,程序中的大多数字符串都不会变得太大,因为向前跳过 65536、167772162 ** 322 ** 64变得太有价值。对于其中一些情况,实际上可能是考虑拆分字符串的好时机。特别是如果一个字符串溢出超出 64 位寻址空间的大小。

无论如何,我想知道是否有人对这个概念有一些想法。我很肯定,为什么我以前没有在实践中看到过这个概念,我可能错过了一些东西。

感谢您发现任何建议或问题!


编辑:删除背景信息以使问题的意图更加明显(我的算法中是否存在我可能遗漏的任何潜在缺陷等)


注意:此算法主要用于帮助解决 SZ 中的速度问题

0 投票
1 回答
568 浏览

c - fread() 不添加空终止符 [C],不能添加一个,因为我有一个指向指针的指针

第 37 行,我正在尝试打印缓冲区指针中的数据。但是我有一个指向指针(char* 缓冲区)的指针(gdhFileProp->buffer)。由于我使用的是 fread(),因此在读取文件内容时不会添加 \0。而且由于它是指向指针的指针,因此我无法添加 \0。

0 投票
2 回答
942 浏览

c++ - 尝试从 fstream 中获取 char * 时出现奇怪的字符

我正在尝试从文件中的特定位置读取 4 个字符。代码很简单,但结果确实令人困惑:

理想情况下,结果应该是“DICM”,但控制台的实际结果是“DICM”加上奇怪的字符,如图所示。更重要的是,每次我运行它,字符都是不同的。我想这可能与 ASCII 和 Unicode 有关,我尝试将项目属性从 Unicode 更改为多字节,然后再改回来,没有区别。

在此处输入图像描述

有谁知道这里发生了什么,我该如何解决?非常感谢!

0 投票
1 回答
120 浏览

python - Python UDP-Receive buffer being overwritten

I have a client(written in Python) and a server(writted in C)

Here is part of my code for python udp client:

while the output it produces after communicating with server(written in C) is:

Name: travel Prague.mp4
Size: 1936l Prague.mp4
Port: 5008l Prague.mp4
IP: 127.0.0.1gue.mp4
IP: 127.0.0.1gue.mp4

How can i solve this problem?

0 投票
2 回答
520 浏览

c++ - c++ null 终止的对象数组

我正在尝试创建一个像这样的以空结尾的对象数组

然后像这样访问它们

我到底做错了什么?当我尝试“旅行”该生物时,我收到了 EXC_BAD_ACCESS。我知道数组的创建有问题,因为如果我尝试使用我的访问 for 循环打印所有生物的地址,它会永远打印。我知道我的指针逻辑有问题,帮助?

生物宣言是这个

0 投票
1 回答
97 浏览

c++ - 如何使用不包含空终止符的字符串捕获错误

我在下面附加了一个相当简单的代码,其中手动将文件名输入到程序中并定义为大小为 9 的数组,这在本示例中是正确的。为简洁起见,将文件名传递给此处未包含的函数。该函数将在数据中以五个向量字符串的形式打开文件,并将它们反馈给主程序,在主程序中可以通过指针算法对其进行访问。正如我在本例中提到的,程序可以工作,但是如果我将 File1 的大小从 9 更改为 8,它就不起作用,因为没有考虑空终止符。本着使这个程序更安全的精神,我希望程序在字符串大小不包括空终止符时识别条件,并跳过函数调用及其所有相关的代码行。然而,当不包含空终止符时,代码不会产生错误,所以我不确定如何在这种情况下使用异常处理。任何想法将不胜感激。

0 投票
1 回答
154 浏览

c++ - 关于C++的cstring的一堆问题

我有几个关于 cstrings 的问题想澄清:

1)初始化:当如下声明一个字符数组时,C++会自动将其定义为cstring吗?或者(我相信)一个字符数组?

char a[10];

换句话说,这是一个只包含空终止符 ('\0') 的字符数组还是一个空字符数组?

2) 当直接处理 cstring 的索引 ( i.e. a[i] = ch+1;) 时,cstring 会自动处理它的空终止符,还是程序员有责任为它留出空间并插入它?

示例代码(这是我认为正确的答案):

3)在使用<cstring>库(如strncpy、strncat等)时,是否处理空终止符?例子:

这会导致以下数组吗?

最后:

这会导致以下数组吗?

对不起,混乱。