问题标签 [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.
c - 循环似乎在到达 C 中的空字符之前终止
下面是我构建的 Tokenizer 的一部分。用户键入一个他们希望标记的字符串,该字符串存储到一个 char 数组中,一旦字符串结束,就会放置一个空字符 ('\0')。这部分代码在经过几次测试后似乎运行良好。
当我创建数组(newToken)的数组(tokenArray)时,我遇到的问题稍后会出现在代码中。我使用函数来获取令牌数量和令牌长度。
我输入了字符串“测试铅笔计算器”。然后我将每个令牌存储到一个数组中。问题是当我去打印数组的内容时,我打印的循环在它应该之前停止了。
这是一个示例输入/输出。我的评论(不在代码中)由
对于我的一生,我根本无法弄清楚为什么 while 循环在它应该退出之前退出。我怀疑这是我的方法的唯一问题,但在我弄清楚这一点之前,我无法解决其他错误。
以下是我的代码部分负责此操作:
从主要:
我遇到错误的方法:
我已经尝试了几件事,但无法掌握它。我是 C 的新手,所以我完全有可能犯了指针错误或访问了我不应该的内存;在那张纸条上,我将如何实现 malloc() 和 free()?我一直在阅读它并且似乎可以工作,但我无法实现这些功能。
c - fscanf() 跨不同编译器的行为不一致(消耗尾随空字符)
我用 C99 编写了一个完整的应用程序,并在两个基于 GNU/Linux 的系统上对其进行了彻底的测试。当尝试在 Windows 上使用 Visual Studio 编译它导致应用程序行为异常时,我感到很惊讶。起初我无法断言出了什么问题,但我尝试使用 VC 调试器,然后我发现fscanf()
在stdio.h
.
以下代码足以说明问题:
假设file.bin正好包含512\0256\0128\0
:
现在,当在 Ubuntu 机器上在 GCC 4.8.4 下编译时,生成的程序会按预期读取数字并打印512, 256, 128
到标准输出。
在 Windows 上使用 MinGW 4.8.1 编译它会得到相同的预期结果。
但是,当我使用 Visual Studio Community 2015 编译代码时,似乎有很大的不同;即,输出为:
如您所见,尾随的空字符已被 使用fscanf()
,因此fgetc()
捕获并丢弃对数据完整性至关重要的字符。
注释掉这些行使fgetc()
代码在 VC 中工作,但在 GCC(可能还有其他编译器)中破坏它。
这里发生了什么,如何将其转换为可移植的 C 代码?我是否遇到了未定义的行为?请注意,我假设 C99 标准。
java - 在java中,用空字符改变char数组的大小
以下代码(来自 Gaale Laakman 的“Cracking the code interview”)展示了如何在不使用数组副本的情况下删除 char 数组中的重复字符以避免一些额外的内存使用。它用偏移量重新写入第一个数组中的最后一个字符。由于最后的数组比前一个小,所以在最后一个字符之后的位置设置了一个空字符,就好像数组停在那里一样:
我想知道这样做是否会改变数组的变量“长度”。如果没有,我不明白为什么这个例子有效。或者这只是一个示例,我们将检查空字符在哪里以查找数组的长度并且不使用有问题的长度变量?
这是整个代码:
c++ - 使用反向循环反转字符串时空字符会发生什么
我是 C++ 中字符串的新手。我只是对下面代码的工作感到困惑(用于反转字符串)。
问题是字符串的最后一个字符是空字符'\0'
。因此,当循环运行第一次迭代时,它应该在开头放置一个空字符,rev
还有一件事,这里的字符串rev
可能不是空终止的,因为'\0'
它没有被分配为字符串的最后一个字符。
但是当我执行程序时,它工作正常。我知道我在思考这一切时错了。谁能解释一下工作?我会很高兴并感谢你:)
bash - 当存在空字符并使用 -z 选项时,Grep 不起作用
我的 grep 命令是:
并且 testfile.txt 包含:
输出:
它工作正常,但是当“开始”和“结束”之间存在空字符时,它不起作用。我知道这是因为我使用了“-z”选项,但我需要它来支持多行。
例如,这是我的带有空字符的内容:
c - 使用 scanf 进行字符输入,但 do-while 循环不会在空字符处停止
我对编程完全陌生(大学第一学期),我跟不上我的讲师。目前我被困在这个练习上(比我愿意承认的时间要长得多)。我试图在互联网上(在这个网站和其他网站上)寻求帮助,但我不能,因为我们的讲师让我们使用一种非常简单的 c 形式。我不一定要求一个完整的答案。我真的很感激甚至一些关于我错在哪里的提示。我知道这对某些人来说可能真的很简单,这个问题可能看起来很无知或愚蠢,我为没有弄清问题而感到难过,但我需要尝试理解。
所以,我想做的是使用 scanf 和 do while 循环,这样用户就可以在数组中输入字符。但我不明白为什么当用户按下 ENTER 时循环不会停止。代码还有更多内容,但我正在尝试慢慢来,一步一步来。(我不允许使用指针和 getchar 等)。
c++ - 删除字节数组缓冲区之间的空字符(\x00):Qt
我正在使用类readAll()
方法QSerialPort
从虚拟 COM 端口读取数据。
我从我的硬件板上得到两个响应。
1.确认("10")
字符串
2.查询数据(";1395994881;1.0.0")
字符串数据
作为QByteArray : 10\x00;1395994881;1.0.0
我想\x00
从我的QByteArray
.
每当我试图对我的 QByteArray 执行任何操作时,我都会执行第一部分,QByteArray
即 ``10 。剩下的部分被跳过了;1395994881;1.0.0
。
如果有任何方法可以\x00
从 中删除此字符,请指导我QByteArray
。
代码
QByteArray data = serial.readAll(); //("10\x00;1395994881;1.0.0");
试用:
QList<QByteArray> list = data.split('\x00'); qDebug()<<list; // 10
试用:
qDebug()<<data.remove(2, 1); //10
试用:
qDebug()<<QString(data); //10
试用:
qDebug()<<data.replace('\x00', ""); //10
试用:
Used Loop to go byte by byte, but same result
无论如何,我希望将结果字符串作为单个字符串或拆分。但是需要完整的字符串,例如10;1395994881;1.0.0
or10
和;1395994881;1.0.0
。
我还提到了以下Stack Overflow
问题。
1.
2.
3.QByteArray to QString
Remove null from string:Java
Code Project
编辑
请帮助我。
c# - 什么可能导致 XML 文件被空字符填充?
这是一个棘手的问题。我怀疑这需要一些文件系统的高级知识才能回答。
我有一个面向 .NET 框架 4.0 的 WPF 应用程序“App1”。它有一个Settings.settings
生成标准App1.exe.config
文件的文件,其中存储了默认设置。当用户修改设置时,修改进入AppData\Roaming\MyCompany\App1\X.X.0.0\user.config
。这都是标准的 .NET 行为。但是,有时我们会发现user.config
客户机器上的文件不是应有的文件,这会导致应用程序崩溃。
问题看起来像这样:user.config
如果用 XML 填充它应该是大小,但不是 XML,它只是一堆 NUL 字符。这是字符 0 一遍又一遍地重复。我们没有关于导致此文件修改的原因的信息。
如果我们只是删除,我们可以在客户的设备上解决这个问题,user.config
因为公共语言运行时只会生成一个新的。他们将丢失对设置所做的更改,但可以再次进行更改。
但是,我在另一个带有另一个 XML 文件的 WPF 应用程序“App2”中遇到了这个问题,info.xml
. 这次不同了,因为文件是由我自己的代码生成的,而不是由 CLR 生成的。共同的主题是两者都是 C# WPF 应用程序,都是 XML 文件,并且在这两种情况下,我们都完全无法在测试中重现问题。这可能与 C# 应用程序与 XML 文件或一般文件交互的方式有关吗?
我们不仅不能在我们当前的应用程序中重现问题,而且我什至无法通过编写故意生成错误的自定义代码来重现问题。我找不到导致文件被空值填充的单个 XML 序列化错误或文件访问错误。那么可能会发生什么?
App1user.config
通过调用Upgrade()
和Save()
获取和设置属性来访问。例如:
App2info.xml
通过序列化和反序列化 XML 进行访问:
我们在 Windows 7 和 Windows 10 上都遇到过这个问题。在研究这个问题时,我遇到了这篇文章,在 Windows 8.1 中遇到了同样的 XML 问题:Saved files sometime only contains NUL-characters
是否可以在我的代码中更改某些内容以防止这种情况发生,或者问题是否存在于 .NET 的行为中?
在我看来,有三种可能:
- CLR 正在将空字符写入 XML 文件。
- 文件的内存地址指针在不移动文件内容的情况下切换到另一个位置。
- 文件系统尝试将文件移动到另一个内存地址并且文件内容被移动但指针没有得到更新。
我觉得 2 和 3 比 1 更有可能。这就是为什么我说它可能需要高级文件系统知识。
我将非常感谢任何可能帮助我重现、修复或解决问题的信息。谢谢!
javascript - 容忍 RegEx 中的某些字符
我正在编写一个消息格式化解析器,它能够(除其他外)解析链接。这种特定情况需要解析 from of 中的链接<url|linkname>
并将该文本替换为linkname
. 这里的问题是,两者url
或linkname
可能或可能不包含或以任何顺序在任何地方包含\1
或字符(尽管每个最多一个)。\2
我想匹配模式但保留“无效”字符。这个问题自己解决了,linkname
因为模式的那部分是 just ([^\n+])
,但是url
片段匹配一个更复杂的模式,更具体地说是来自is.js的 URL 验证模式。手动修改整个模式以容忍它并非易事[\1\2]
到处都是,我需要模式来保留这些字符,因为它们用于跟踪目的(所以我不能只是.replace(/\1|\2/g, "")
在匹配之前)。
如果这种匹配是不可能的,是否有一些自动化的方法可以可靠地修改正则表达式以[\1\2]{0,2}
在每个字符匹配之间添加、添加\1\2
到所有[chars]
匹配等。
这是url
取自的模式is.js
:
此模式适用于我的目的,<url|linkname>
格式如下:
使用它的代码在这里:JSFiddle
澄清示例(...
代表namedUrlRegex
上面的变量,并且$2
是捕获的捕获组linkname
):
\1
请注意适用于\2
,\1\2
,\1...\2
等的\2...\1
相同规则上下文:这用于将来自 WYSIWYG 编辑器的字符串规范化为它将显示的长度/内容,保留当前选择的位置(由 表示
\1
,\2
因此可以在解析后恢复)。如果“插入符号”被完全删除(例如,如果光标位于链接的 URL 中),它将选择整个字符串。一切都按预期工作,除了选择在 url 片段中开始或结束时。编辑澄清:我只想更改字符串中的段,如果它遵循
<url|linkname>
whereurl
匹配 URL 模式(容忍\1
,\2
)的格式并且linkname
由非\n
字符组成。如果字符串中不满足此条件<...|...>
,则应按照上面的示例保持不变。not_a_url