49得票2回答
为什么Python中的字符串比较如此快速?

我在解决以下算法问题时变得好奇了,想要理解 Python 中字符串比较的内部工作原理: 给定两个字符串,返回最长公共前缀的长度。 解法1:逐字符比较 我的直觉告诉我,最优解法应该是从两个单词的开头开始用一个光标迭代向前,直到前缀不再匹配。大概像这样: def charByChar(sm...

45得票2回答
在C语言中,向strncmp函数传递一个非空结束字符串是否合法?

我有一个16字节的数组,保存了可执行文件段的名称。 char segname[16]; 如果段名称长度小于16字节,则其余部分将填充空字节。否则,没有终止的空字节。 我想比较segname和各种字符串,例如__text。 使用非空结尾字符串调用strncmp是否合法? 这篇文章假设...

22得票2回答
strncmp(NULL, "foo", 0)是否定义良好?

如果第三个参数为零,将NULL指针作为strncmp的参数是安全的吗?例如,如下调用: strncmp(NULL, "foo", 0);

13得票3回答
这个strncmp的使用是否包含越界读取?

Fortify表示这是一个越界读取:if (strncmp("test string", "less than 32 char", 32) == 0) { ... } 它指出该函数从小于32个字符的范围外读取数据。 如果strncmp超出32个字符并且第二个字符串少于32个字符,是否确实存在...

7得票2回答
strncmp(s1, s2, 0)返回的是未定义行为吗?(即,最后一个参数为零)?

从标准中并不清楚strncmp(来自string.h)的作用。 int strncmp(const char *s1, const char *s2, size_t n); 如果第三个参数n为0,则应返回。 根据C17标准草案7.24.4.4: strncmp函数最多比较n个字符(...

7得票1回答
当 size 为 0 时,strncmp 的返回值是 0。

c/c++的strncmp函数签名如下: int strncmp ( const char * str1, const char * str2, size_t num ); 我的问题是,如果num为0,返回值是什么?标准怎么说?在一些在线文档中没有找到答案。 谢谢。

7得票6回答
在使用strncmp()时,如果在表达式中使用strlen()是否会破坏使用strncmp()而不是strcmp()的目的?

据我理解,strcmp() (没有'n') 一旦在任意一个参数中看到空字符,就会立即停止处理并返回结果。 因此,如果其中一个参数被100%确定为以空字符结尾(例如字符串字面量),那么使用strncmp()(带有'n')并调用strlen()作为第三个参数来限制比较到已知字符串长度,将不会有任何...