问题标签 [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.
c++ - C ++:将读取的二进制文件存储到缓冲区中
我正在尝试读取二进制文件并将其存储在缓冲区中。问题是,在二进制文件中有多个以空字符结尾的字符,但它们不在末尾,而是在其他二进制文本之前,所以如果我将文本存储在 '\0' 之后,它只会将其删除缓冲。
例子:
这只会输出:this is a
这是我的真实代码:
此函数读取一个字符
这就是我使用它的方式:
c - 将空终止符视为 C 中的常规字符
我想将 char[] 中的所有字符复制到另一个 char[]。但是,假设有一个 '\0' 那么我想把它当作一个普通字符——如果你愿意的话。因此,当我打印出带有格式说明符 %s 的 char[] 时,它不应该停在中间。例如
有没有办法做到这一点?
c - 删除尾随 NULL 终止符
我有一个用 0 填充的大型 char 数组。我从套接字读取传入文件并将其内容放在缓冲区中。我无法写入包含所有 '\0' 的缓冲区,因此我分配了一个具有正确大小的新缓冲区并进行写入。我使用这种方法来做到这一点:
虽然这种方法有效,但它似乎不是最聪明或最优雅的方法。从 char 数组中删除所有尾随 NULL 字符的最佳方法是什么?
c - 部分前缀空终止字符串
是否使用 NULL 终止字符串 (SZ) 或长度前缀字符串 (LPS) 似乎是一个热门话题。确实,我们甚至在这里对这个话题提出了问题。
所以我发生了一些事情。我们可以两者都用一点吗?我的意思是,很明显,你不能制作一个 LPS & SZ (LPSZ?) 字符串而不删除其中一个或另一个的一些很棒的东西。
然而,关于 SZ 的最大抱怨似乎是操作所需的时间,因为字符串长度测量需要很长时间。我对此有一个想法:
使所有字符串 SZ。但是,我们也可以将字符串 mod 256 的长度(即:)存储在字符串len % 256
前面的单个字节中。虽然它不会降低操作的复杂性,但它可能会显着提高速度,代价是增加一个字节。
以下是该方案的主要优点:
- 不限于任何特定尺寸
- 比普通 SZ 更快(高达 256 倍)
- 兼容所有不同的内存大小
- 小字符串仍然非常节省空间(没有浪费的字节
len
) - 没有字节顺序问题
- 可跨机器移植(见 3 和 5)
这就是strlen ()
在这个方案下的样子(显然,你会用别的名字命名它,因为你会创建一个不同的库):
一个合适的名称可能是 PPSZ(部分前缀空终止字符串)。
对我来说,这似乎是一个合理的权衡:一个字节用于相当大的加速度。当然,有人可能会问:为什么不是两个、四个或八个字节呢?我的回答是,程序中的大多数字符串都不会变得太大,因为向前跳过 65536、167772162 ** 32
或2 ** 64
变得太有价值。对于其中一些情况,实际上可能是考虑拆分字符串的好时机。特别是如果一个字符串溢出超出 64 位寻址空间的大小。
无论如何,我想知道是否有人对这个概念有一些想法。我很肯定,为什么我以前没有在实践中看到过这个概念,我可能错过了一些东西。
感谢您发现任何建议或问题!
编辑:删除背景信息以使问题的意图更加明显(我的算法中是否存在我可能遗漏的任何潜在缺陷等)
注意:此算法主要用于帮助解决 SZ 中的速度问题
c - fread() 不添加空终止符 [C],不能添加一个,因为我有一个指向指针的指针
第 37 行,我正在尝试打印缓冲区指针中的数据。但是我有一个指向指针(char* 缓冲区)的指针(gdhFileProp->buffer)。由于我使用的是 fread(),因此在读取文件内容时不会添加 \0。而且由于它是指向指针的指针,因此我无法添加 \0。
c++ - 尝试从 fstream 中获取 char * 时出现奇怪的字符
我正在尝试从文件中的特定位置读取 4 个字符。代码很简单,但结果确实令人困惑:
理想情况下,结果应该是“DICM”,但控制台的实际结果是“DICM”加上奇怪的字符,如图所示。更重要的是,每次我运行它,字符都是不同的。我想这可能与 ASCII 和 Unicode 有关,我尝试将项目属性从 Unicode 更改为多字节,然后再改回来,没有区别。
有谁知道这里发生了什么,我该如何解决?非常感谢!
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?
c++ - c++ null 终止的对象数组
我正在尝试创建一个像这样的以空结尾的对象数组
然后像这样访问它们
我到底做错了什么?当我尝试“旅行”该生物时,我收到了 EXC_BAD_ACCESS。我知道数组的创建有问题,因为如果我尝试使用我的访问 for 循环打印所有生物的地址,它会永远打印。我知道我的指针逻辑有问题,帮助?
生物宣言是这个
c++ - 如何使用不包含空终止符的字符串捕获错误
我在下面附加了一个相当简单的代码,其中手动将文件名输入到程序中并定义为大小为 9 的数组,这在本示例中是正确的。为简洁起见,将文件名传递给此处未包含的函数。该函数将在数据中以五个向量字符串的形式打开文件,并将它们反馈给主程序,在主程序中可以通过指针算法对其进行访问。正如我在本例中提到的,程序可以工作,但是如果我将 File1 的大小从 9 更改为 8,它就不起作用,因为没有考虑空终止符。本着使这个程序更安全的精神,我希望程序在字符串大小不包括空终止符时识别条件,并跳过函数调用及其所有相关的代码行。然而,当不包含空终止符时,代码不会产生错误,所以我不确定如何在这种情况下使用异常处理。任何想法将不胜感激。
c++ - 关于C++的cstring的一堆问题
我有几个关于 cstrings 的问题想澄清:
1)初始化:当如下声明一个字符数组时,C++会自动将其定义为cstring吗?或者(我相信)一个字符数组?
char a[10];
换句话说,这是一个只包含空终止符 ('\0') 的字符数组还是一个空字符数组?
2) 当直接处理 cstring 的索引 ( i.e. a[i] = ch+1;
) 时,cstring 会自动处理它的空终止符,还是程序员有责任为它留出空间并插入它?
示例代码(这是我认为正确的答案):
3)在使用<cstring>
库(如strncpy、strncat等)时,是否处理空终止符?例子:
这会导致以下数组吗?
最后:
这会导致以下数组吗?
对不起,混乱。