c - 我们将 -1 作为 strncmp() 中第三个参数的值传递,会发生什么。 n 要比较的字节数?

标签 c cross-platform memcmp strncmp

我有三个问题

  1. 我们将 -1 作为 strncmp() 中第三个参数的值传递,会发生什么。要比较的字节数是 n 个字节?
  2. 为什么 ARM 和 PPC 的输出不同? IE。如果哪一个是正确的?
  3. 如果我使用 memcmp 而不是 strncmp,我会在 ARM 和 PPC 中获得“inside else”输出。如何以及为何?

    char str[10];
    
    memset(str,'\0',sizeof(str));
    
    printf("str:%s ,len:%d\n\r",str,strlen(str));
    
    if(strncmp(str,"Maximum",(strlen(str)-1)) == 0)    
    {         
        printf("inside if\n\r");     
    }   
    else    
    {    
        printf("inside else\n\r");    
    }
    

以 ppc 形式输出

str: ,len:0
inside else

ARM 输出

str: ,len:0
inside if

最佳答案

What will happen we pass -1 as value for 3rd parameter in strncmp()

假设第三个参数定义为 size_t,并且进一步假设 size_t 定义为 unsigned 整数,传入 - 1 将导致“环绕”,并且该函数将接收 SIZE_MAX 的值。在 32 位系统上,这可能是 0xffffffff

关于c - 我们将 -1 作为 strncmp() 中第三个参数的值传递,会发生什么。 n 要比较的字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31743944/

相关文章:

c++ - 可变长度字符串内容的非递归检查

c++ - 序列化和反序列化 uint64_t - 不同平台上的不同结果

c - 长双数学库实现?

c - "char *p, *getenv();"有什么作用?为什么函数的变量声明行中没有参数?

swing - 在 Scala 中创建 GUI,但没有 Swing/AWT

android - unsigned char 打印正确的值,如 memcmp

c++ - 在 C++ 中的结构上使用 memset

c - 我会滥用 fwrite 功能吗?

c# - 如何在 Xamarin.Forms 跨平台的特定页面上设置 ContentPage 方向或屏幕方向

c - 我应该在 MSVC - C 上使用安全版本的 POSIX 函数吗