问题标签 [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 回答
3701 浏览

c# - 为什么 C#/.Net 字符串以长度为前缀并以 null 结尾?

阅读空终止字符串的基本原理是什么?以及一些类似的问题,我发现在 C#/.Net 中,字符串在内部都是以长度为前缀和以空结尾的,就像在BSTR Data Type中一样。

字符串既是长度前缀又是空终止的原因是什么,而不是例如。只有长度前缀?

0 投票
3 回答
707 浏览

c++ - 如何正确地将 char* 转换为 std::string?(使用 expat / std::string(char*) 时的问题)

问题描述

我正在将 Expat 与自定义 C++ 包装器一起使用,我已经在其他项目中对其进行了测试。我遇到了问题,因为原始数据(c_str)没有以正确的方式转换为 std::string。这让我很担心,因为我没有更改包装器的来源。

在此转换后,字符串似乎获得了以空字符结尾的字符:

我怎样才能解决这个问题?

自己的外籍人士包装

自定义解析器

expat 包装器中的字符数据 (char*)

expat 包装器中的字符数据 (char*)

解析器中的字符数据(std::string)

解析器中的字符数据(std::string)

0 投票
6 回答
1839 浏览

c++ - 使用字符串数组:指针数组——它们像多维数组吗?

我最近一直在为傻瓜阅读 C++,要么标题用词不当,要么他们没有指望我。在关于利用带有字符串的指针数组的部分中,它们显示了一个函数,我完全被难住了,不知道该转向哪里。

首先(但不是主要问题),我不明白为什么返回类型是指针以及如何在不超出范围的情况下返回 pszMonths 。我已经在这本书和网上阅读过它,但在这个例子中我没有得到它。

我的主要问题是“这是如何工作的?!?!”。我不明白如何创建一个指针数组并实际初始化它们。如果我没记错的话,你不能用数字数据类型来做到这一点。“指针数组”中的每个指针是否像一个数组本身,包含组成单词的各个字符?这整件事让我大吃一惊。

8 月 20 日 - 因为在我看来,试图帮助我的人对我的困惑实际上源于何处感到有些困惑,我会尝试更好地解释它。我特别关注的代码部分如下:

我认为当你创建一个指针时,你只能将它分配给另一个预定值。我很困惑,似乎是一个指针数组(按这里的书)初始化月份名称。我不认为指针实际上可以初始化值。数组是否动态分配内存?“无效”本质上等同于“新字符”;声明或类似的东西?

如果他们回答了我的问题,我会尝试重新阅读这些帖子,但我只是第一次不明白。

0 投票
2 回答
197 浏览

c - 为什么 puts 函数不适用于 C++ 中来自套接字的输入字符?

这是我运行登录管理器的服务器的代码,它登录到恶意访问的文件并打印出错误登录的结果。chars user 和 pass 来自使用套接字的用户输入。

好吧,问题在于输出控制台和日志文件中的输出。

像这样:

为什么会有奇怪的 asci 字符?如何避免新行,因为它们来自套接字的用户输入?

0 投票
4 回答
19309 浏览

c - strstr() 用于非空终止的字符串

如何在 C 中对计数字符串(即空终止)进行就地等效?strstr()

0 投票
1 回答
1287 浏览

matlab - 使用“fscanf”从 MATLAB 中的串行线读取数据时解释零

我有一个从 Arduino 板通过串行线路输入的数据流。流看起来像这样:

前两个字节(0x43 和 0x03)是单字节整数值。接下来的两个字节(0x39 和 0x00)是单个 16 位 little-endian 有符号整数值。最后两个字节(0x10 和 0x13)应该是一个终止序列(“\r\n”)。

我正在使用 MATLAB 读取这些数据。我创建了一个串行连接,打开它,然后读入数据。不幸的是,我在使用 0x00 作为字节值时遇到了问题,因为fscanf只是认为它是字符串的空终止符。

这是一些示例代码:

不幸的是,发生的事情是“integerByteChars”不是我希望的 2 元素数组,而是 1 元素数组,因为fscanf它只是认为 0x00 是一个以空值结尾的字符串值。然而,这让我感到惊讶,因为我使用“%c”而不是“%s”(用于字符串)输入数据。

我需要的是一个函数,它可以将这些字节作为数据读取,即使它是零字节并且不会将其丢弃。我可以使用哪些功能来做到这一点?可以强制fscanf这样做吗?

0 投票
6 回答
48920 浏览

c++ - C++ char 数组空终止符位置

我是一名学习 C++ 的学生,我试图了解以空字符结尾的字符数组是如何工作的。假设我像这样定义一个 char 数组:

正如预期的那样,strlen(str1)等于 11,并且它是空终止的。

如果上述 char 数组的所有 11 个元素都用字符“hello world”填充,C++ 将空终止符放在哪里?它实际上是否分配了一个长度为 12 而不是 11 的数组,第 12 个字符是'\0'CPlusPlus.com似乎暗示 11 个中的一个需要是'\0',除非它确实分配了 12 个。

假设我执行以下操作:

这个输出Str2: hello worldatcomY╗°g♠↕,我假设是 C++ 在指针指向的位置读取内存,char* str2直到它遇到它解释为空字符的内容。

但是,如果我这样做:

Terminated Str2: hello world按预期输出。

但是写入并不str2[11]意味着我们正在分配的内存空间之外写入str2,因为str2[11]是第 12 个字节,但我们只分配了 11 个字节?

运行此代码似乎不会导致任何编译器警告或运行时错误。这在实践中安全吗?使用malloc( strlen(str1) + 1 )而不是会更好malloc( strlen(str1) )吗?

0 投票
4 回答
3416 浏览

c++ - 为什么 char 数组必须以空字符结尾?

为什么 chararray必须以空字符结尾?有什么理由我必须将空字符添加到每个char数组?

似乎他们得到了同样的待遇。

0 投票
4 回答
2978 浏览

java - 带有 \0 的字符串在 Java 中的行为很奇怪

为什么 a 与 b 不同?

0 投票
1 回答
2369 浏览

c++ - 通过本机字符串创建 BSTR(使用 _bstr_t 包装器)时,如何设置长度?

创建BSTR(用作包装类)时,_bstr_t我必须使用. _bstr_t由于 aBSTR是可能包含空字符的长度前缀字符串,因此必须有可能使用本地字符串创建这样的字符串,而不依赖于给定本地字符串的空终止。

举个例子:

问题是构造函数依赖于pwNativeString. 所以结果BSTR只是"abc"而已。所以我的问题是:如何创建一个BSTR_bstr_t并传递一个指向具有特定长度的数组的指针?下面是一个伪代码示例: