C 未获取任何输出(应为布尔输出)

C 未获取任何输出(应为布尔输出),c,equality,c-strings,return-type,function-definition,C,Equality,C Strings,Return Type,Function Definition,所以我试着不使用string.h文件。我创建了有效的字符串长度函数。然后我创建了一个函数来检查两个函数是否相同,但我没有得到任何输出。 我已经测试了string-length函数,这很有效。我不确定我在第二个函数中做错了什么。请指出错误 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> char stringLength(char userString[]) { int i=0,c

所以我试着不使用string.h文件。我创建了有效的字符串长度函数。然后我创建了一个函数来检查两个函数是否相同,但我没有得到任何输出。 我已经测试了string-length函数,这很有效。我不确定我在第二个函数中做错了什么。请指出错误

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

char stringLength(char userString[])
{
    int i=0,count=0;
    while (userString[i] != '\0')
    {
        count = (count + 1);
        i = (i + 1);
    }
    return count;

}


bool stringCheck (char a[], char b[])
{
    bool isEquals = false;
    if (stringLength(a) == stringLength(b))
    {
        int i=0, count=0;
        while (i<stringLength(a))
        {
            if (a[i] == b[i])
            {
                count+=1;
            }

            i+=1;
        }

        if (count == stringLength(a))
            isEquals = true;
        else
            isEquals = false;
    }
    else
        isEquals = false;

    return isEquals;
}

int main()
{
    stringCheck("abcd", "abcd");
    return 0;
}
#包括
#包括
#包括
char-stringLength(char-userString[])
{
int i=0,count=0;
while(userString[i]!='\0')
{
计数=(计数+1);
i=(i+1);
}
返回计数;
}
布尔字符串检查(字符a[],字符b[]
{
布尔等质量=假;
如果(stringLength(a)=stringLength(b))
{
int i=0,count=0;
而(i该函数起作用

只是您没有捕获
stringCheck()
函数的返回值。您可以按如下所示执行此操作

bool strMatch = stringCheck("abcd", "abcd");
if(true == strMatch)
{
    // Do something when the strings are same
}
else
{
    // Do something else otherwise
}
另外,作为对
stringCheck()
函数的改进,您有一个循环

while (i < stringLength(a))
这将起作用,因为字符串的长度在循环中不会改变

<>我发现了问题>代码> StRINGLINTHOST()/Cux>函数。首先,用于返回长度的变量的数据类型<代码>计数>代码>是代码> int <代码>,而函数的返回类型集是“代码> char < /代码>。此外,考虑更改函数的返回类型<代码> StRINGLINTHOST()
大小
以及同一函数中变量
计数的数据类型

char stringLength(char userString[])

如果返回类型为
char
,则如果字符串长度超过127字节,则函数将出现错误

stringLength()
函数的下一个改进是,
i
count
似乎同时更新。我想不出当您可以简单地返回
i
而不是
count
时,为什么需要两个变量


如果您首先使用某些gcc标志(如
-Wall
)编译代码,编译器会警告您所有这些问题。

正如@wedapasi所说,您的代码可以工作。您只需要使用结果

但是,您的代码过于复杂。完全没有理由在第一个函数中使用两个变量。此外,第一个函数不应返回字符(除非您希望该函数不处理长度超过127或255个字符的字符串),而是使用
int
或者最好使用
size\u t
。这样做:

size_t stringLength(char userString[])
{
    int count=0;
    while (userString[i] != '\0') 
        count++;

    return count;
}
对于第二个函数,比较它们的长度只是浪费时间。下面是一个更简单的实现:

bool stringCheck (char a[], char b[])
{
    size_t index = 0;
    while(a[index] != '\0') {
        if(a[index] != b[index]) return false;
        index++;
    }

    return true;
}

如果需要,还可以添加一些检查参数是否为空指针。

您没有使用
main
中函数
stringCheck
的返回值

int main()
{
    stringCheck("abcd", "abcd");
    return 0;
}
至少你可以写一些例子

int main( void )
{
    printf( "Strings are %sequal\n", stringCheck("abcd", "abcd") ? "" : "not " );
    return 0;
}
除此之外,您的代码效率非常低,通常甚至可以调用未定义的行为

例如,函数
stringLength
将返回超过
127
255
个字符的字符串长度不正确,这取决于类型
char
的行为是否与类型
signed char
unsigned char
相同

该函数应该声明为

size_t stringLength( const char userString[] )
{
    size_t count = 0;

    while ( userString[count] != '\0' ) ++count;

    return count;
}
或者,例如在函数
stringCheck
中,为循环中变量
i
的每个值调用函数
stringLength

    int i=0, count=0;
    while (i<stringLength(a))
             ^^^^^^^^^^^^

当从
main
调用时,您没有存储
stringCheck
的返回值。那么您如何确定函数失败?如果这不是问题,请在调试器中逐行检查代码。另一方面,在同一个字符串上多次调用
stringLength
效率低下。最好存储t另一方面注意:对于
stringLength
使用返回类型
char
for
stringLength
意味着在某些平台上,它只适用于长度不超过127个字符的字符串,而在某些其他平台上,它只适用于长度不超过255个字符的字符串。因为您使用的是
int
变量d长度,最好使用返回类型
int
(实际上,最好使用
size\u t
而不是
int
,因为这与
strlen
函数匹配。)没有产生任何形式输出的函数可以解释为什么没有输出。是的,我意识到我把它弄得太复杂了。我刚开始学习C语言。非常感谢你指出了更好的解决方案!
size_t stringLength( const char userString[] )
{
    size_t count = 0;

    while ( userString[count] != '\0' ) ++count;

    return count;
}
    int i=0, count=0;
    while (i<stringLength(a))
             ^^^^^^^^^^^^
bool stringCheck( const char *s1, const char *s2 )
{
    while ( *s1 && *s1 == *s2 )
    {
        ++s1;
        ++s2;
    }

    return *s1 == *s2;
}