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

What will happen we pass -1 as value for 3rd parameter in strncmp() ie. n number bytes of bytes to compare?

我有三个问题,

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

    char str[10];
    
    memset(str,'[=10=]',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

手臂输出

str: ,len:0
inside if

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

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