Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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中的两个字符串?_C_String_Comparison - Fatal编程技术网

比较C中的两个字符串?

比较C中的两个字符串?,c,string,comparison,C,String,Comparison,由于未进行比较,此代码不起作用。为什么? 如果,则所有名称都会通过 printf("Enter Product: \n"); scanf("%s", &nameIt2); printf("Enter Description: \n"); scanf("%s", &descriptionI); printf("Enter Quantity: \n"); scanf("%d", &qtyI); printf("Enter Order Quantity: \n"); scanf

由于未进行比较,此代码不起作用。为什么?

如果,则所有名称都会通过

printf("Enter Product: \n");
scanf("%s", &nameIt2);
printf("Enter Description: \n");
scanf("%s", &descriptionI);
printf("Enter Quantity: \n");
scanf("%d", &qtyI);
printf("Enter Order Quantity: \n");
scanf("%s", &ordqtyI);

while (fscanf(fp4, "%s %s %d %s\n", &namet2, &description2, &qty2, &ordqty2) != EOF){
    if(namet2 != nameIt2)
        fprintf(fpt2, "%s %s %d %s\n", &namet2, &description2, qty2, &ordqty2);
}

您当前正在比较这两个字符串的地址

用于比较两个字符数组的值

 if (strcmp(namet2, nameIt2) != 0)
要比较两个C字符串(
char*
),请使用。当字符串相等时,函数返回
0
,因此您需要在代码中使用此选项:

if (strcmp(namet2, nameIt2) != 0)
如果你(错误地)使用


您正在比较两个字符串的指针(地址),当您有两个不同的指针时(在您的情况下总是如此),这两个字符串的指针(地址)是不相等的。

您需要使用
strcmp

strcmp(namet2, nameIt2)

您尝试在此处比较指针,而不是指向的内容(即,您的字符)


您必须使用
memcmp
str{,n}cmp
来比较内容。

数组的名称指示起始地址。
namet2
nameIt2
的起始地址都不同。因此,equal to(
==
)运算符检查地址是否相同。对于比较两个字符串,更好的方法是使用
strcmp()
,或者我们可以使用循环逐个字符进行比较。

对于比较两个字符串,可以使用内置函数
strcmp()
使用头文件
string.h

if(strcmp(sr1,str2)) // this returns 0 if strings r equal 
    flag=0;
else flag=1; // then last check the variable flag value and print the message 

                         OR

char str1[20],str2[20];
printf("enter first str > ");
gets(str1);
printf("enter second str > ");
gets(str2);

for(int i=0;str1[i]!='\0';i++)
{
    if(str[i]==str2[i])
         flag=0;
    else {flag=1; break;}
}

 //check the value of flag if it is 0 then strings r equal simple :)
if(strcmp(a,b)==0)
    printf("Entered strings are equal");
else
    printf("Entered strings are not equal");
或者您可以编写自己的函数,如下所示:

int string_compare(char str1[], char str2[])
{
    int ctr=0;

    while(str1[ctr]==str2[ctr])
    {
        if(str1[ctr]=='\0'||str2[ctr]=='\0')
            break;
        ctr++;
    }
    if(str1[ctr]=='\0' && str2[ctr]=='\0')
        return 0;
    else
        return -1;
}

要回答您问题中的原因:

因为等式运算符只能应用于简单的变量类型,例如
float
s、
int
s或
char
s,而not则应用于更复杂的类型,例如结构或数组。 要确定两个字符串是否相等,必须逐个字符显式比较这两个字符串

scanf(“%s”)和&variable
看起来可疑。数组名“衰减”为指向第一个元素的指针,因此&variable不是不必要的,就是严重的错误,具体取决于变量类型。
int string_compare(char str1[], char str2[])
{
    int ctr=0;

    while(str1[ctr]==str2[ctr])
    {
        if(str1[ctr]=='\0'||str2[ctr]=='\0')
            break;
        ctr++;
    }
    if(str1[ctr]=='\0' && str2[ctr]=='\0')
        return 0;
    else
        return -1;
}