C 函数接受两个字符串,要比较第n个字符

C 函数接受两个字符串,要比较第n个字符,c,C,我有一个接受两个字符串的函数,我想,让我们来比较每个字符串的第二个字母。 如何修复此语句: if (strncmp(str1 + 1, str2 + 1) != 0) { ... 我收到一个错误,指出传递参数会使指针从整数变为不带强制转换的指针。如果希望允许任何字符串都可能小于要比较的位置,请执行以下操作: if (str1[1] == str2[1]) { /* Do something */ } /* Return 1 if s1[n] > s2[n], 0 if s1[n

我有一个接受两个字符串的函数,我想,让我们来比较每个字符串的第二个字母。 如何修复此语句:

if (strncmp(str1 + 1, str2 + 1) != 0) {
...

我收到一个错误,指出传递参数会使指针从整数变为不带强制转换的指针。

如果希望允许任何字符串都可能小于要比较的位置,请执行以下操作:

if (str1[1] == str2[1]) {
    /* Do something */
}
/* Return 1 if s1[n] > s2[n], 0 if s1[n] == s2[n], -1 if s1[n] < s2[n].
   Return -2 if any of the strings is smaller than n bytes long. */
int compare_nth(const char *s1, const char *s2, size_t n)
{
    size_t i;

    for (i=0; i < n; ++i)
        if (s1[i] == 0 || s2[i] == 0)
            return -2;

    if (s1[n] < s2[n])
        return -1;
    else if (s1[n] > s2[n])
        return 1;
    else
        return 0;
}
如果您确实知道每个字符串中至少有
n
个字符,您可以按照其他人说的做:

if (s1[n] == s2[n]) {
    /* do whatever you want to do here */
}

(注意:由于C中的索引是从0开始的,
n
在这里的意义相同。因此,为了测试第二个字符,
n
将是
1

如果您希望允许任何字符串都可能小于您要比较的位置:

/* Return 1 if s1[n] > s2[n], 0 if s1[n] == s2[n], -1 if s1[n] < s2[n].
   Return -2 if any of the strings is smaller than n bytes long. */
int compare_nth(const char *s1, const char *s2, size_t n)
{
    size_t i;

    for (i=0; i < n; ++i)
        if (s1[i] == 0 || s2[i] == 0)
            return -2;

    if (s1[n] < s2[n])
        return -1;
    else if (s1[n] > s2[n])
        return 1;
    else
        return 0;
}
如果您确实知道每个字符串中至少有
n
个字符,您可以按照其他人说的做:

if (s1[n] == s2[n]) {
    /* do whatever you want to do here */
}

(注意:由于C中的索引是从0开始的,
n
在这里使用相同的含义。因此,为了测试第二个字符,
n
将是
1

这不是正确使用
strncmp
,顺便说一句。还有第三个参数
size\u t n
,它规定了应该比较的长度。在本例中,您可以使用
==
简单地比较字符本身。哎呀,我忘了将“1”作为第三个参数。顺便说一句,这不是正确使用
strncmp
。还有第三个参数
size\u t n
指示您应该比较的长度。在本例中,您可以使用
==
简单地比较字符本身。哎呀,我忘了将“1”作为第三个参数。这是最简单的方法。这是最简单的方法