Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这个函数没有';t成功确定两个任意字符串是否相同?_C_Arrays_String - Fatal编程技术网

C 为什么这个函数没有';t成功确定两个任意字符串是否相同?

C 为什么这个函数没有';t成功确定两个任意字符串是否相同?,c,arrays,string,C,Arrays,String,我编写了一个简单的函数,它应该返回用户提供的两个字符串是否相同。 也就是说,如果是,则返回1,如果不是,则返回0 下面是一个简单的可运行程序,请检查并指出错误 #include <stdio.h> int compare_strings(char string0[], char string1[]) { int success = 0; if (sizeof(string0)/sizeof(char) == sizeof(string1)/size

我编写了一个简单的函数,它应该返回用户提供的两个字符串是否相同。 也就是说,如果是,则返回
1
,如果不是,则返回
0

下面是一个简单的可运行程序,请检查并指出错误

#include <stdio.h>

int compare_strings(char string0[], char string1[])
{
        int success = 0;

        if (sizeof(string0)/sizeof(char) == sizeof(string1)/sizeof(char))
        {   
                success = 1;
                for (int i = 0;i < sizeof(string0)/sizeof(char);i++)
                {   
                        if (string0[i] != string1[i])
                        {   
                                success = 0;
                                break;
                        }   
                }   
        }   

        return success;
}

void main(int argc, char **argv)
{
        if (argc >= 3)
        {   
                int yes_or_no = compare_strings(argv[1], argv[2]);
                if (yes_or_no == 0)
                {   
                        printf("FALSE\n");
                }   
                else
                {   
                        printf("TRUE\n");
                }   
        }   
        else
        {   
                printf("I need at least two parameters!\n");
        }   
}
#包括
int比较_字符串(字符字符串0[],字符字符串1[]
{
int成功=0;
if(sizeof(string0)/sizeof(char)=sizeof(string1)/sizeof(char))
{   
成功=1;
对于(int i=0;i=3)
{   
int yes_或_no=比较_字符串(argv[1],argv[2]);
如果(是或否==0)
{   
printf(“假”);
}   
其他的
{   
printf(“TRUE\n”);
}   
}   
其他的
{   
printf(“我至少需要两个参数!\n”);
}   
}

这只确定指向
char
的指针的大小,这是char数组作为函数参数衰减的结果

sizeof(string0)
为了进行字符串长度比较(当然假设以0结尾的
char
序列),您需要使用

strlen(string0)
然后只比较指向不同字符串的指针,即它们存储的地址,而不是它们的内容。对于两个不同的数组,这保证是不同的,即带有
的表达式=将始终为真

string0[i] != string1[i]
为了比较两个以0结尾的字符序列(正如argv所保证的那样),使用


这只确定指向
char
的指针的大小,这是char数组作为函数参数衰减的结果

sizeof(string0)
为了进行字符串长度比较(当然假设以0结尾的
char
序列),您需要使用

strlen(string0)
然后只比较指向不同字符串的指针,即它们存储的地址,而不是它们的内容。对于两个不同的数组,这保证是不同的,即带有
的表达式=将始终为真

string0[i] != string1[i]
为了比较两个以0结尾的字符序列(正如argv所保证的那样),使用


sizeof确实测量字符串长度。字符串中的字符数或内存中的长度?您应该在编译过程中注意到,您会得到类似于
的警告:sizeof on array函数参数将返回“char*”的大小,而不是“char[]”[-Wsizeof array array argument]
,这意味着您最终只检查每个字符串的第一个
sizeof(char*)
字符,而不是您所期望的。使用
strlen()
而不是
sizeof()/sizeof(char)
要读取的内容:sizeof确实测量字符串长度。字符串中的字符数或内存中的长度?您应该在编译过程中注意到,您会得到类似于
警告:数组函数参数上的sizeof将返回“char*”而不是“char[]”的大小[-Wsizeof array argument]
,这意味着您最终只检查每个字符串的第一个
sizeof(char*)
字符,而不是您期望的字符。使用
strlen()
而不是
sizeof()/sizeof(char)
要读取的内容:For
argv[x]
,字符串将始终以null结尾,因此您可以只使用
strcmp()
没有max-length参数.Hmpf。衰变和解释函数参数是相关的,但不完全相同。@重复数据消除者可以随意详细说明。我将选择它并改进我的答案。或者添加一个包含这些细节的答案,我将很高兴对一些能教会我一些东西的东西进行投票。
argv[x]
,字符串将始终以null结尾,因此您可以只使用
strcmp()
没有max length parameter.Hmpf。衰减和解释函数参数是相关的,但不完全相同。@重复数据消除者可以随意详细说明。我会选择它并改进我的答案。或者添加一个包含这些详细信息的答案,我很乐意为我学到的东西投票。