问题标签 [strncmp]

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 投票
1 回答
1229 浏览

c++ - Arduino上的strncmp_P和strncmp_PF之间的区别?

Arduino 上的 strncmp_P 和 strncmp_PF 有什么区别?我了解 strncmp_F,但 strncmp_PF 的目的是什么?

0 投票
3 回答
1746 浏览

c - strncmp:异常分段错误

我真的是 C 的新手,但我写 C++ 已经有一段时间了。我正在编写一个客户端服务器聊天程序。在用户输入用户名后,我需要在会话开始时向用户提示几个不同的选项。起初我试图使用 getchar() 函数,但由于某种原因,以下模式的任何语句都不会产生预期的结果:

如果用户输入 2,它将永远不会进入“doSomething”区域。所以我尝试改用 fgets 和 strncmp 。但是现在,我不断在 strncmp 上遇到分段错误。这是代码中最相关的部分,在我尝试使用 getchar 时有一些注释掉的部分。诚然,这有点混乱,因为我只是把它放在一起作为测试。我想也许为字符串分配额外的空间将有助于防止段错误,但当然它没有。

您可以在剩余的评论中看到尝试做一些事情的剩余部分,例如用减法将 char 转换为 int。这来自我在互联网上找到的东西。我还在互联网上听说 getchar 将 \n 留在输入缓冲区中。

因此,这是我为客户端编写的完整代码,因此您可以将其放在上下文中:

}

0 投票
2 回答
227 浏览

c - 结构文件中的 strcpy / strncmp 分段错误

我正在尝试将新节点添加到具有 char* 字段(单词)的结构中

listT的定义:

add_word_node 函数被 main 调用为:add_word_node(read_word, list_head) whereread_word由用户使用 scanf 给出。Word 作为字符串传递,但在 strncpy 之后没有终止字节。

我已经阅读了有关此问题的其他一些主题,并且我将函数更改为使用 word[] 而不是 char* 但它仍然不起作用。如果您需要更多信息,请告诉我。另外,当我使用 strndup 时,它有时可以正常工作。

0 投票
1 回答
187 浏览

c - 两个语句中的 strncmp 比单个语句中花费更多时间

为了在我的代码中进行文件排序,我用于strncmp比较每个字符串的第一个元素。

包括我的代码:

代码 1:

代码 2:

这里 比Code 2需要更多的时间Code 1。我正在使用跨平台设备并Code 2在其上运行会导致我的代码的其他部分出现许多问题。

为什么两个语句比较比单个语句比较花费更多时间?

0 投票
2 回答
631 浏览

c - strncmp() 有惯用的用法吗?

strncmp()函数实际上只有一个用例(用于字典顺序):

其中一个字符串的长度已知, 另一个字符串已知为 NUL 终止。(作为奖励,已知长度的字符串根本不需要以 NUL 结尾。)

我相信只有一个用例的原因(前缀匹配检测不是字典顺序): (1) 如果两个字符串都是 NUL 终止的,strcmp()应该使用它,因为它会正确地完成工作;(2) 如果两个字符串的长度都已知,memcmp()则应该使用,因为这样可以避免对 NUL 进行不必要的逐字节检查。

我正在寻找一种惯用(且可读)的方式来使用该函数正确地按字典顺序比较两个这样的参数(其中一个是 NUL 终止的,其中一个不一定是 NUL 终止的,具有已知的长度)。

成语存在吗?如果是这样,它是什么?如果不是,它应该是什么,或者应该使用什么?

简单地使用 的结果是strncmp()行不通的,因为在已知长度的参数比 NUL 终止的参数短的情况下,它会导致错误的相等结果,并且它恰好是一个前缀。因此,需要额外的代码来测试这种情况。

作为一个独立的功能,我认为这种结构没有太大问题,而且它看起来很惯用:

但是,当将此构造内联到代码中时,它会导致双重测试0何时需要特殊操作:

内联调用的动机是因为独立函数是深奥的:哪个字符串参数是 NUL 终止的,哪个不是。

请注意,问题不是关于性能,而是关于编写惯用代码和采用编码风格的最佳实践。我看到比较中有一些 DRY 违规。有没有一种简单的方法来避免重复?


† 通过known length,我的意思是长度是正确的(没有嵌入的 NUL 会截断长度)。换句话说,输入在程序中的某个较早时间点进行了验证,并记录了它的长度,但输入没有显式地以 NUL 终止。作为一个假设的例子,文本流上的扫描仪可能具有此属性。‡ 正如addy2012
所指出的,可用于前缀匹配。我专注于字典顺序。但是,(1)如果前缀字符串的长度用作长度参数,则两个参数都需要以 NUL 结尾,以防止读取比前缀字符串短的输入字符串。(2) 如果已知前缀字符串和输入字符串之间的最小长度,则strncmp()memcmp()在以更少的 CPU 成本提供等效功能并且不损失可读性方面,这将是一个更好的选择。

0 投票
1 回答
1658 浏览

c - 在不是结构或联合的东西中请求成员,但它是一个结构

这段代码是我为学校作业做的二叉搜索树。

这是我的完整代码。好吧,我删除了不必要的代码位,但这就是我需要知道的所有内容..

这是我正在使用的节点类型。

在 insert_tree 处,插入一个节点即可。

但是当我使用 strncmp 时,它会出错。

“请求非结构或联合的成员”

root 不是节点结构吗?

我不明白为什么会出错。

0 投票
1 回答
157 浏览

c - C程序中的Strncmp问题

在这个社区的帮助下,我设法编写了一个代码,用于从我需要的输入 xvg 文件中提取一个片段。它几乎对我有用,但它与 strncmp 有一个小问题。我想得到这个输入文件文件的一部分,比如 1000 到 2000,行以 @ 和 # 开头,所以我将这些值存储到名为starting_point和stopping_point.Problem的字符串中是它不识别起始点和停止点。一些随机输出被存储到输出文件中。

它适用于小型输入文件。

但不适用于显示的输入文件。


输入文件看起来像这样

0 投票
1 回答
81 浏览

c - 我们将 -1 作为 strncmp() 中第三个参数的值传递,即。n 要比较的字节数?

我有三个问题,

  1. 我们将 -1 作为 strncmp() 中第三个参数的值传递,即。n 要比较的字节数?
  2. 为什么ARM和PPC的输出不同?IE。如果哪一个正确?
  3. 如果我使用 memcmp 而不是 strncmp,我会在 ARM 和 PPC 中获得“inside else”输出。如何以及为什么?

    /li>

以 ppc 输出

手臂输出

0 投票
2 回答
90 浏览

c - 获取以前缀开头的文件行

我正在尝试检测明文的哪些行以“linePrefix”开头。使用上面的代码,即使有巧合,strcmp也永远不会返回 0。有谁知道我在哪里失败?

0 投票
2 回答
234 浏览

c - 我是否以正确的方式使用 strncmp 和 fgets?

我是一名尝试学习 C 的初学者程序员。目前我正在上课并分配了一个项目,我设法很快完成了该项目,至少是其中的主要部分。不过,我在 main() if 函数周围编码时遇到了一些麻烦,因为我开始使用一些新函数(即 fgets 和 strncmp)。现在,我的代码可以在我的编译器中运行,但不能在任何在线编译器中运行。所以我想知道我是否做错了什么,或者是否有任何方法可以改进它。

感谢任何帮助或贡献,谢谢!

下面是代码,加密和解密函数是 main 之前的前两个函数,我相信大部分乱七八糟的快捷代码可能都在这里。