- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试创建我自己的学校项目所需的 strncmp 函数,我运行使用相同 srcmp 函数的代码,但提供了我想要比较的 ASCII 代码的限制大小:
编码:
#include <stdio.h>
int strncmp(char *s1, char *s2, unsigned int n)
{
int i;
int diff;
i = 0;
diff = 0;
while ((s1[i] != '\0' || s2[i] != '\0') && (unsigned)i < n)
{
diff = s1[i] - s2[i];
if (diff != 0)
{
break ;
}
i++;
}
return (diff);
}
int main(){
char s11[] = "abcs";
char s12[] = "zzfs";
unsigned int p = 3;
printf("%d", strncmp(s11, s12, p));
}
输出 :
-22
它应该比较 3 个字符,而不仅仅是第一个,对吗?
最佳答案
What does strncmp actually do?
strncmp
比较字符串中的前两个字符。 (当比较字符时,它使用它们的值作为
unsigned char
,即使它们通过指针传递给
char
。)如果字符不同或者是空字符:
strncmp
返回一个正值。 strncmp
返回负值。 strncmp
返回零。 strncmp
继续以相同的方式比较以下字符,直到
n
对进行了比较。如果在
n
之后没有发现差异已比较,
strncmp
返回零。
strncmp
的一些实现可能会返回不同的两个字符之间的有符号差异,但这不是 C 标准所要求的。
strncmp
可以简单地为“大于”和“小于”返回 +1 和 -1,或者可以使用其他正值和负值。
关于c - strncmp 实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68795333/
据我了解,strcmp()(无“n”)在任一参数中看到空字符后,立即停止处理并返回结果。 因此,如果已知 100% 确定其中一个参数以 null 结尾(例如,它是一个字符串文字),则使用 strncm
我找不到我的 parse() 函数中的问题。简短介绍:我从我的终端程序发送“boot\r\n”,调用了 parse() 函数,strncmp(buffer, "boot",4) 永远不会进入 if 分
我尝试创建我自己的学校项目所需的 strncmp 函数,我运行使用相同 srcmp 函数的代码,但提供了我想要比较的 ASCII 代码的限制大小: 编码: #include int strn
我在使用 strncmp 时遇到问题。据我了解,理论上,如果两个字符串比较的字符相等,strncmp 应该返回 0;但是,当我进行比较时,代码行为不当并产生误报(不等于字符,仍然会产生 if 子句)。
该程序应该允许用户输入一些名称(直到用户希望继续),然后按升序显示这些名称。我使用了 strncmp 函数来比较 char 数组。但是,当运行此命令时,只有已排序名称列表的第一个和最后一个名称作为输出
这段代码在“check_connected”过程中有一个奇怪的行为。使用strncmp函数之前将参数转换为char[30],如果不转换,结果是“堆栈溢出”。问题出现在两个字符串的比较结果中,“Le s
我有一个静态检查器,它提示在 if 条件下使用 strncmp,说 Logical operation performed on expression with possible side effec
我真的是 C 的新手,但我已经编写 C++ 有一段时间了。我正在写一个客户端服务器聊天程序。在用户输入用户名后,我需要在 session 开始时提示用户几个不同的选项。起初我试图使用 getchar(
我不知道如何在 C 中使用字符串: 这是我的服务器的一部分:中断永远不会被调用,即使我通过 telnet 提供了字符“/”。 理想情况下,这将通过将字符串 ch 一遍又一遍地添加到它来缓冲名为 get
在运行下面的代码时,我看到出现了 "x,y" 模式。此模式正在此处打印:printf("%s", start);。但是 if (strncmp(cp, VAL, strlen(VAL) == 0 ))
我一直在解决 strncmp 和 getline 的问题...所以我做了一个小测试应用程序。 strncmp 给出误报,我不知道我做错了什么。 这是程序 #include FILE *fp=NULL
我目前有一个正在运行的链表结构,我需要找到一种方法让用户在该结构中搜索某个字段。我已经完成了,但问题是它必须是准确的。例如,如果用户输入“maggie”它会返回结果,但是如果用户输入“mag”它不会像
这是快速背景:我有一个客户端程序和一个服务器程序,它们通过 Unix 套接字相互通信。在服务器端解析收到的消息时,我试图使用 strncmp 来确定要采取的操作。 我遇到的问题是弄清楚 strncmp
Fortify 表示这是越界读取: if (strncmp("test string", "less than 32 char", 32) == 0) { ... } 表示函数从小于32个字符的边界外
如果输入是 end,strncmp("end",input,3) == 0 不应该返回 0 吗?但它返回一个 > 0 的数字。 #include int main(void) { char *s
我正在尝试编写一个比较数字前两位数字的函数,并且由于 itoa 不可用,因此我使用之前通过谷歌搜索找到的 sprintf 首先将数字转换为字符串,然后比较每个数字。由于某种奇怪的原因,当我运行这个程序
在这个关于带有信号量的共享内存(生产者/消费者)的程序中(在 DEBIAN 上),当我使用带有字符串“end”的 strncmp 函数时,为了打开 0 标志(运行)来终止 while 循环, strn
我是 C 代码新手。对于此特定代码,如果用户输入名称 john, “john is Cool” 将被打印。我认为我没有正确使用 strncmp() 。有人可以帮忙吗? #include #inclu
在我输入10个名字后,我必须打印所有以A开头的名字。它不打印任何内容 #include #include #include void main(void) { int i; char
为了在我的代码中进行文件排序,我使用了 strncmp 来比较每个字符串的第一个元素。 在这里包括我的代码: 代码 1: for (i = 1; i < file_cnt; ) { if ((st
我是一名优秀的程序员,十分优秀!