【问题标题】:Why strcmp() works differently in code blocks (particularly in gcc) and other compilers? [duplicate]为什么 strcmp() 在代码块(尤其是 gcc)和其他编译器中的工作方式不同? [复制]
【发布时间】:2018-07-02 09:55:27
【问题描述】:

我只是试图在代码块中执行这个程序,我得到了 0,1,-1 的输出,在其他一些编译器中我得到了结果 0,4,-1 但根据 strcmp() 的工作,我应该得到 0,4,-32 ,我无法理解为什么我在不同的编译器上得到不同的输出。

#include<stdio.h>
#include<string.h>
int main()
{
char string1[]="Jerry";
char string2[]="Ferry";
int i,j,k;
i=strcmp(string1,"Jerry");
j=strcmp(string1,string2);
k=strcmp(string1,"Jerry boy");
printf("%d %d %d \n",i,j,k);
return 0;
}

【问题讨论】:

  • 标准只保证一个负返回值(表示第一个字符串按字典顺序小于第二个)、零(等于)或正(表示按字典顺序大于)。对于特定的负值和正值将是什么没有要求。
  • strcmp() 的唯一要求是返回一个整数:negative 如果第一个字符串按字典顺序小于第二个字符串,zero 如果字符串相等,positive 如果第一个字符串在字典上大于第二个字符串。只有标志很重要。允许实现返回任何值(只要符号正确);这允许他们通过(可能)利用目标硬件提供的功能来选择最佳计算方式。

标签: c codeblocks c-strings strcmp


【解决方案1】:

strcmp() 返回大于或小于或等于0 的值。这意味着它将返回0 确定两个字符串是否相等,否则它可以返回任何大于或小于0 的整数值

【讨论】:

  • 我认为应该使“任何价值”更加突出。毕竟是这个答案的肉和土豆:)
  • 快速写出答案,然后用重复的、有趣的策略来关闭问题,以锁定其他答案;))
  • @Ctx;不,那不是策略。我确实关闭了这个问题,因为我在给出答案后在评论中找到了链接。
  • @user9121710;不,it doesn't
  • 好的,这意味着根据标准它应该只返回正数、负数或零
猜你喜欢
  • 2021-08-29
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 2018-07-12
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多