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

c - 为什么我的函数只破坏了我的一个字符数组?

嘿男孩/女孩!这里是新的,所以如果我的格式化方式有什么问题,我不会介意批评。

这是我的程序中的一个片段,用于检查两个字符串是否是彼此的字谜,不区分大小写。

但是,与l_str1数组相比,数组总是以某种方式“损坏” l_str2,无论调用顺序Lowercase_Strings或分配给任一数组的字符串如何。

例如,str1 = "MARY"andstr2 = "ARMY"将导致l_str2 = "army", 但l_str1 = "mary"最后有 2 个随机符号。

如果有人知道发生了什么,将不胜感激。

0 投票
1 回答
7686 浏览

c - 关于字符串、空字符和strcmp

我在微控制器中创建了 C 程序,并且想将我的 C 程序中的字符串与从我的 PC 接收到的字符串进行比较,我的 PC 中使用 C# 的程序,并且默认情况下 C# 中的字符串不包含空字符。

那么,我的 c 程序不会自动在从 PC 接收的字符串中添加空字符吗?

strcmp 函数是否可以比较 2 个字符串,1 个字符串包含空字符,另一个不包含空字符?

0 投票
4 回答
456 浏览

c - 当我的字符串在 c 程序中包含空字符时?

我仍然不知道,我的 c 程序中的字符串何时包含以空字符结尾的字符串,何时不包含。

我的代码示例

如果我在我的代码中使用 printf,c 程序是否会自动在打印的字符串末尾添加空终止符?

0 投票
1 回答
119 浏览

c - 我应该如何在缓冲区溢出的有效输入和 shellcode 之间划界?

我得到了一个分配程序,并被告知要对其进行缓冲区溢出。我的教授已经配置了我们正在开发的VM在堆栈上执行shellcode,所以我只需要将shellcode的开头放入返回地址。我试图溢出的缓冲区是s1[64]. s1应该是一个有效的文件名,因为它稍后会在程序中使用,并且exit(1)如果它无效将导致程序。我假设我应该s1以这种格式填写输入: validFileName+fileNameTerminator+Filler+Shellcode

S1使用 . 从命令行读入scanf(%s,s1)。我遇到的问题是,无论我选择在有效文件名与填充符和 shellcode 的开头之间放置什么,程序都会认为整个输入是文件名并且无法打开它。我尝试过使用短文件名和 63 和 64 长度的文件名,都给出了相同的结果。例如:如果我s1按照/./././././././././././././././././././././././testFile1GCL.txt\0AAAAAAAA\xeb\x18\x5e\x31\xc0\x88\x46\x07\x89\x76\x08\x89\x46\x0c\xb0\x0b\x8d\x1e\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68 我期望的值给出输入s1/./././././././././././././././././././././././testFile1GCL.txt因为它足够长以填充整个缓冲区,并且后面是空终止符。问题是当我s1打印出来时,它会打印整个输入,就好像它没有看到空终止符并且显然在其给定范围之外。这会导致程序出错,因为那个巨大的东西显然不是有效的文件名。

我已经尝试了几乎所有我能想到的放在文件名和我的有效载荷的其余部分之间的东西,包括\\0 \0 0x0 0x90. 无论如何,程序总是认为s1是整个长输入而失败。即使它不识别终止符,为什么它甚至在分配给的 64 个字符之外寻找s1

编辑:我现在尝试在文件名和有效负载的其余部分之间放置一个空格,以防止文件退出,但这只是因为 scanf 在该空间处停止并且没有读取有效负载的其余部分

0 投票
1 回答
972 浏览

c++ - 新动态字符数组末尾的空字符

如果我创建动态字符数组:

而且我没有用字符串填充它,空字符\0会在这个数组的末尾吗?

0 投票
5 回答
87 浏览

c - 在 C 中以空值结尾的字符串

我有一个字符串,最后有一些空格。我想在第一个空格出现的位置终止这个字符串,这样当我以后做strncpy()它时,它只会复制不包含空格的字符串部分。

这是一些尝试,显然给了我一个 segault。我怎样才能做我打算做的事?

0 投票
2 回答
694 浏览

c - 在未以 NULL 结尾的文件中搜索以 NULL 结尾的字符串

我正在编写一个程序,它打开两个文件进行读取:第一个文件包含 20 个名称,我将它们存储在表单的数组中Names[0] = John\0。第二个文件是一个大文本文件,其中包含 20 个名称中每个名称的多次出现。

我需要我的程序扫描第二个文件的整个内容,每次找到其中一个名称时,Count都会增加一个变量,以此类推,在程序完成后,文本中出现的所有名称的总数存储在Count.

这是我的循环,它搜索并计算名称出现的次数:

无论我做什么,这个循环都不会像我期望的那样工作,但我发现了问题所在(我认为!)。我的问题是数组中的每个名称都以 NULL 结尾,但是当名称出现在文本文件中时,它不是以 NULL 结尾的,除非它作为一行的最后一个单词出现。因此,此while循环仅计算任何名称出现在行尾的次数,而不是任何名称在文本文件中任何位置出现的次数。如何调整这个循环来解决这个问题?

感谢您提前提供任何建议。

0 投票
4 回答
23697 浏览

c - 如何使用 printf 打印字符串而不打印尾随换行符

我正在尝试使用打印一些字符串,printf()但它们是空终止有尾随换行符并且与格式混淆:

假设字符串包含"The Racing car."并且文件名是"RandomText1.txt" 这样打印:

但是我希望它只打印一行:

我知道我可以修改字符串以摆脱空终止符换行符,但如果可能的话,我想在不修改字符串的情况下实现此输出。

是否可以?

0 投票
5 回答
1079 浏览

c - C 实现可以“在后台”使用长度前缀字符串吗?

读完这个问题后:长度前缀字符串克服了以零结尾的字符串的问题是什么?我开始怀疑,究竟是什么阻止了 C 实现为堆栈或堆上分配的任何charwchar_t数组分配一些额外的字节并将它们用作“字符串前缀”来存储N其元素的数量?

然后,如果N-th 字符是'\0',则N - 1表示字符串长度。

我相信这可以极大地提高函数的性能,例如strlenor strcat

0如果程序广泛使用非终止数组,这可能会导致额外的内存消耗char,但这可以通过编译器标志打开或关闭已编译代码的常规“count-until-you-reach- '\0'”例程来解决。

这种实施可能存在哪些障碍?C标准是否允许这样做?这种技术会导致哪些我没有考虑到的问题?

而且……这真的做过吗?

0 投票
2 回答
309 浏览

c++ - 如何确保在采用数组的 constexpr 函数中该数组以 NULL 结尾?

以下代码旨在创建一种最长 8 个字符的字符串的简单哈希:

对于普通字符串文字和 constexpr 以 NULL 结尾的字符串,它确实可以正常工作。但如果我做这样的事情:

,输出将与字符串相同"\x1\x2\x3\x4\x5\x6\x7\x8"。我尝试static_assert(array[N-1]==0,"Failed");在 的定义中添加 a string_hash,但编译器说这array[N-1]不是常量表达式。然后我尝试声明参数constexpr,但编译器说不能声明参数constexpr

那我该怎么做这个检查?