比较C中的两个字符串?

由于未进行比较,此代码无效。 为什么?

所有名字都超过了if

 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); } 

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

 if (strcmp(namet2, nameIt2) != 0) 

如果你(错误地)使用

 if (namet2 != nameIt2) 

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

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

 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; } 

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

使用strcmp比较两个char数组的值

  if (strcmp(namet2, nameIt2) != 0) 

你试着在这里比较指针,而不是指向的内容(即你的角色)。

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

数组的名称表示起始地址。 namet2nameIt2起始地址不同。 所以等于( == )运算符检查地址是否相同。 为了比较两个字符串,更好的方法是使用strcmp() ,或者我们可以使用循环逐个字符地进行比较。

在你的问题中回答为什么:

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

你需要使用strcmp

 strcmp(namet2, nameIt2) 
 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 :)