问题标签 [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.
c++ - Arduino上的strncmp_P和strncmp_PF之间的区别?
Arduino 上的 strncmp_P 和 strncmp_PF 有什么区别?我了解 strncmp_F,但 strncmp_PF 的目的是什么?
c - strncmp:异常分段错误
我真的是 C 的新手,但我写 C++ 已经有一段时间了。我正在编写一个客户端服务器聊天程序。在用户输入用户名后,我需要在会话开始时向用户提示几个不同的选项。起初我试图使用 getchar() 函数,但由于某种原因,以下模式的任何语句都不会产生预期的结果:
如果用户输入 2,它将永远不会进入“doSomething”区域。所以我尝试改用 fgets 和 strncmp 。但是现在,我不断在 strncmp 上遇到分段错误。这是代码中最相关的部分,在我尝试使用 getchar 时有一些注释掉的部分。诚然,这有点混乱,因为我只是把它放在一起作为测试。我想也许为字符串分配额外的空间将有助于防止段错误,但当然它没有。
您可以在剩余的评论中看到尝试做一些事情的剩余部分,例如用减法将 char 转换为 int。这来自我在互联网上找到的东西。我还在互联网上听说 getchar 将 \n 留在输入缓冲区中。
因此,这是我为客户端编写的完整代码,因此您可以将其放在上下文中:
}
c - 结构文件中的 strcpy / strncmp 分段错误
我正在尝试将新节点添加到具有 char* 字段(单词)的结构中
listT的定义:
add_word_node 函数被 main 调用为:add_word_node(read_word, list_head)
whereread_word
由用户使用 scanf 给出。Word 作为字符串传递,但在 strncpy 之后没有终止字节。
我已经阅读了有关此问题的其他一些主题,并且我将函数更改为使用 word[] 而不是 char* 但它仍然不起作用。如果您需要更多信息,请告诉我。另外,当我使用 strndup 时,它有时可以正常工作。
c - 两个语句中的 strncmp 比单个语句中花费更多时间
为了在我的代码中进行文件排序,我用于strncmp
比较每个字符串的第一个元素。
包括我的代码:
代码 1:
代码 2:
这里 比Code 2
需要更多的时间Code 1
。我正在使用跨平台设备并Code 2
在其上运行会导致我的代码的其他部分出现许多问题。
为什么两个语句比较比单个语句比较花费更多时间?
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 成本提供等效功能并且不损失可读性方面,这将是一个更好的选择。
c - 在不是结构或联合的东西中请求成员,但它是一个结构
这段代码是我为学校作业做的二叉搜索树。
这是我的完整代码。好吧,我删除了不必要的代码位,但这就是我需要知道的所有内容..
这是我正在使用的节点类型。
在 insert_tree 处,插入一个节点即可。
但是当我使用 strncmp 时,它会出错。
“请求非结构或联合的成员”
root 不是节点结构吗?
我不明白为什么会出错。
c - C程序中的Strncmp问题
在这个社区的帮助下,我设法编写了一个代码,用于从我需要的输入 xvg 文件中提取一个片段。它几乎对我有用,但它与 strncmp 有一个小问题。我想得到这个输入文件文件的一部分,比如 1000 到 2000,行以 @ 和 # 开头,所以我将这些值存储到名为starting_point和stopping_point.Problem的字符串中是它不识别起始点和停止点。一些随机输出被存储到输出文件中。
它适用于小型输入文件。
但不适用于显示的输入文件。
输入文件看起来像这样
c - 我们将 -1 作为 strncmp() 中第三个参数的值传递,即。n 要比较的字节数?
我有三个问题,
- 我们将 -1 作为 strncmp() 中第三个参数的值传递,即。n 要比较的字节数?
- 为什么ARM和PPC的输出不同?IE。如果哪一个正确?
如果我使用 memcmp 而不是 strncmp,我会在 ARM 和 PPC 中获得“inside else”输出。如何以及为什么?
/li>
以 ppc 输出
手臂输出
c - 获取以前缀开头的文件行
我正在尝试检测明文的哪些行以“linePrefix”开头。使用上面的代码,即使有巧合,strcmp
也永远不会返回 0。有谁知道我在哪里失败?
c - 我是否以正确的方式使用 strncmp 和 fgets?
我是一名尝试学习 C 的初学者程序员。目前我正在上课并分配了一个项目,我设法很快完成了该项目,至少是其中的主要部分。不过,我在 main() if 函数周围编码时遇到了一些麻烦,因为我开始使用一些新函数(即 fgets 和 strncmp)。现在,我的代码可以在我的编译器中运行,但不能在任何在线编译器中运行。所以我想知道我是否做错了什么,或者是否有任何方法可以改进它。
感谢任何帮助或贡献,谢谢!
下面是代码,加密和解密函数是 main 之前的前两个函数,我相信大部分乱七八糟的快捷代码可能都在这里。