问题标签 [null-character]

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 投票
2 回答
3626 浏览

c - 为什么“%s”格式说明符即使对于没有 `\0` 的字符数组也有效并且一次打印其所有元素?

看下面的代码:

它输出整个name ERIC。为什么会这样?只有当我们如下%s初始化字符数组时才应该起作用:name

我没有考虑以下内容,因为这显然假设了一个以空字符结尾的字符数组:

0 投票
2 回答
508 浏览

c++ - 在 C++ 中存储非 nul 终止的 C 字符串常量

在任何人说“不要这样做,因为它真的很糟糕”之前。

  1. 我了解使用 NUL 终止字符串的原因。
  2. 我知道有人可以说类似 但是,c-string 表示的便利性太大了。

这样做的原因是我正在为微控制器编程,我需要将数据存储到程序的内存中。一些数据采用字节、字、双字和浮点数的形式。我希望数据连续包含没有 NUL 的字符串。

我尝试了将<size_t N, char* A><size_t N, char (&A)[N]>作为参数的模板,以便遍历数组并将其内容存储到静态数组中,但我不能似乎做对了。我认为该标准实际上可能不允许这样做,这在一般情况下是可以理解的,但在特定情况下是不幸的(特别是这个。;):()

如果我可以将字符串重新映射为boost::mpl::vector_c<char, ...>模板之类的东西,那会更好,因为我有其他代码可以正确存储它,但是从模板中取消引用数组到被用作 const 模板参数似乎也是不允许的。

有任何想法吗?

编辑:

伪代码示例(这有点做作,因为实际代码要大得多,我也不会像这样逐字节读取,也不会使用文字迭代到字符串的末尾。那将嵌入到数据以及某处。):

另请注意,我没有使用 C++11,这是 C++0x,可能是一个扩展。

0 投票
5 回答
3497 浏览

c - 一个小字符串的 strcpy() 变成一个大字符串,大字符串的其余部分保持不变。如何处理它?

在这个示例程序中,为了说明这种行为strcpy(),我将一个字符串"S"写入了一个更大的字符串previous,原来的字符串"Delaware"。但是这种覆盖只影响原始字符串中的前两个字符。原始字符串的其余部分继续具有相同的值。如何处理?(甚至memcpy()似乎可能有相同的行为)。我的意思是,如何将剩余的字符变成0?或者字符串中保留其原始值的其余字符没有副作用?

0 投票
2 回答
2178 浏览

c++ - 字符串中的空字符

来自C++ 字符串文字转义字符的规则,Eli 的回答

之所以有效,是因为此版本的构造函数采用 char 数组;如果您尝试将“0\0”“0”作为 const char* 传递,它会将其视为 C 字符串,并且只会复制所有内容,直到出现空字符。

这是否意味着没有为整个字符串分配空间,即 \0 之后的字符串写在未分配的空间上?

此外,上面的问题是针对 c++ 字符串的,我也观察到了 c 字符串的相同行为。当我在声明期间在字符串中间添加空字符时,c 和 c++ 字符串是否相同?

0 投票
1 回答
94 浏览

java - 如何在java中初始化一个字符串而不导致初始化导致程序出现问题?

我最近写了一个程序,在java中将字符串从中缀转换为后缀!为此,我使用了两个字符串's''p'. 我用'NULL'. 然后我使用 Scanner 类从用户那里获得了 s 的值。

因此,如果用户输入"a+b",则 s 具有值"a+b"。请注意,'NULL'不再是字符串的一部分!

现在我使用连接运算符 '+' 来操作 p,例如:

我确实得到了我的后修复字符串:即

问题是这一次,NULL 并没有消失!p 的值为:

"nullab+"而不是"ab+".

现在我知道我的连接运算符引起了问题!它添加到字符串中!

但是java [eclipse indigo] 不允许我在没有先初始化的情况下使用运算符!我该怎么办?请帮忙!

谢谢

阿努杰卡拉

0 投票
1 回答
3511 浏览

c - Reading NULL character from Serial Port Linux C

I have read many questions and answers but didn't find any solution. May be my question is not right but I need some guidance. I am using serial port in Linux which is reading data from my Arduino device. Whenever I want to send data from Arduino to Linux, I first send two bytes which indicate the total bytes which will come from Arduino. I convert these two bytes to integer value and start reading data from Serial Port. Say, I want to send 300 bytes from Ardiuno to Linux, I will just write {1, 44} first and then convert this 1 and 44 byte into int by the following formula:

this will give me 300 int value, this is working like charm. but problem comes when I have to read data less then 255. Say I want to read 100 bytes, then first two bytes will be {0, 100}. 0 is null character, serial port doesn't process it (I manually wrote 0s to serial port, it always give me 0 bytes written), and my all sequence goes wrong. So my question is can I read null characters from serial port OR someone please give me better solution..

thanks in Advance.

0 投票
0 回答
492 浏览

javascript - javascript中的空字符 - Mongo

我正在尝试处理存储在 MongoDB 中的一些数据。这些是打包在字节字符串中的整数。某种形式的东西:

如果我获取这个字符串并计算它的长度,mongo 的 js 引擎会告诉我它的 0 而不是 7。我通过为触摸数据设置不同的值并计算它的长度来确认这一点:

你好 => 5 他\0llo => 2

关于如何阅读“完整”字符串的任何想法?

0 投票
4 回答
2685 浏览

java - Java BufferedWriter 创建空字符

我一直在使用 Java 的 BufferedWriter 写入文件以解析一些输入。但是,当我打开文件后,似乎添加了空字符。我尝试将编码指定为“US-ASCII”和“UTF8”,但得到了相同的结果。这是我的代码片段:

也许问题甚至不在于 BufferedWriter?

我已将其缩小到此代码块,因为如果我将其注释掉,则输出文件中没有空字符。如果我在 VIM 中进行正则表达式替换,则文件不含空字符 (:%s/.*^L//g)。

如果您需要更多信息,请与我们联系。

谢谢!

编辑: 普通行的 hexdump 看起来像:0000000 5349 2a41 3030 202a

但是当这段代码运行时,hexdump 看起来像:0000000 5330 2a49 4130 202a

我不确定为什么事情会变得混乱。

编辑: 此外,即使文件与正则表达式不匹配并运行该代码块,它也会出现空字符。

编辑: 这是 diff 前几行的 hexdump:http: //pastie.org/pastes/8964701/text

命令是:diff -y testfile.hexdump expectedoutput.hexdump

其余的行与最后两行不同。

0 投票
2 回答
3290 浏览

c++ - 将字符串中带有 NULL 字符的字符串数据复制到 char 数组

我正在尝试将一个字符串复制到 char 数组,字符串有多个 NULL 字符。我的问题是当第一个 NULL 字符遇到我的程序停止复制字符串时。

我使用了两种方法。这就是我到目前为止的情况。

该程序应打印Hello World. How are you?. 请帮我纠正这个问题。

0 投票
1 回答
483 浏览

clr - SQL CLR 用户定义函数 (C#) 在返回的字符串中的每个现有字符之间添加空字符 (\0)

这个问题让我难倒了好几天。这是我第一次涉足 CLR 和 UDF ......

我创建了一个用户定义的函数,该函数将多行字符串作为输入,对其进行扫描并在找到时将字符串中的某一行替换为替代行。如果没有找到,它只是在末尾附加所需的行。(见代码)

当最终的 String(或 Stringbuilder)转换为 SqlString 或 SqlChars 时,问题似乎出现了。转换后的返回字符串始终包含 Nul 字符作为每隔一个字符(通过控制台输出查看,它们显示为空格)。

我可能缺少有关 UDF 和/或 CLR 的一些基本内容。

请帮忙!!

代码(我留在评论过的 Stringbuilder 中,这是我最初的尝试...更改为普通 String 以拼命寻找问题):