gpt4 book ai didi

c - 我无法理解为什么字符串比较结果显示为假阴性?

转载 作者:行者123 更新时间:2023-11-30 21:06:55 25 4
gpt4 key购买 nike

我试图理解,当我指定的“strx”值超过 10 个字符时,它总是导致 strcmp 显示值 -1,而当我指定的 strx 值小于 10 个字符时,strcmp 显示正确的值值为 0。

我的具体问题:如果我们指定的 strx 值大于 str1 的大小,为什么 strcmp 会放弃 -1 的错误结果?

PS:我尝试在复制后打印 str1 和 strx,它显示相同的输出。

#include <stdio.h>
#include <string.h>
int main()
{
char strx[]="123456789101112";
char str1[10];
strcpy(str1,strx);
int ret;
ret = strcmp(str1,strx);
printf("%d\n", ret);
if(ret == 0)
{
printf("Intact. Try Again\n");
printf("Str1 = %s\n",str1);
}
else
{
printf("Overflow successful\n");
}
return 0;
}

最佳答案

Antti Haapala 的评论或多或少总结了这一点。未定义的行为是未定义的。一旦调用它,您就失去了提示该程序可能执行的任何其他操作的权利。

特别是,就您而言,您的一个断言是错误的。您声称如果您打印字符串,它们是相同的。至少对我来说,情况并非如此:

#include <stdio.h>
#include <string.h>

int main()
{
char strx[]="123456789101112";
char str1[10];

strcpy(str1,strx);
printf("%s\n", strx);
printf("%s\n", str1);
int ret;
ret = strcmp(str1,strx);
printf("%d\n", ret);
if(ret == 0)
{
printf("Intact. Try Again\n");
printf("Str1 = %s\n",str1);
}
else
{
printf("Overflow successful\n");
}
return 0;
}

打印:

01112
123456789101112
1
Overflow successful

您认为 strx 位于内存中 str1 之前的假设是不正确的。当您溢出 str1 时,您会更改 strx

关于c - 我无法理解为什么字符串比较结果显示为假阴性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46385818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com