¿Por qué falla mi comparación de cadenas?

Digamos que tengo el siguiente código y salida:

for (j = 0; j <= i; j++) printf("substring %d is %s\n", j, sub_str[j]); 

Salida:

  subcadena 0 es max_n = 20
 la subcadena 1 es max_m = 20 

Ahora solo quiero imprimir algunas subcadenas. Sin embargo, si bash hacer esto condicionalmente:

 for (j=0; j <=i; j++) { if (sub_str[j] == "max_n=20") { printf("substring %d is %s\n", j, sub_str[j]); } } 

No tengo salida en absoluto. ¿Qué pasa con mi código?

No puede usar == para comparar cadenas en C. Debe usar strcmp .

 for (j=0; j<=i; j++) { if (strcmp(sub_str[j], "max_n=20") == 0) { printf("substring %d is %s\n", j, sub_str[j]); } } 

No se pueden comparar cadenas en C con el operador ==. Necesitas usar la función strcmp o strncmp .

Asegúrate de usar strncmp y no strcmp. strcmp es profundamente inseguro .

Páginas de manual de BSD (cualquier nix le dará esta información):

 man strncmp int strncmp(const char *s1, const char *s2, size_t n); 

Las funciones strcmp () y strncmp () comparan lexicográficamente las cadenas terminadas en nulo s1 y s2.

La función strncmp () no compara más de n caracteres. Debido a que strncmp () está diseñado para comparar cadenas en lugar de datos binarios, los caracteres que aparecen después de un carácter `\ 0 ‘no se comparan.

El strcmp () y el strncmp () devuelven un número entero mayor que, igual o menor que 0, según que la cadena s1 es mayor que, igual o menor que la cadena s2. La comparación se realiza utilizando caracteres sin signo, de modo que \200' is greater than \ 0′.

Desde: http://www.codecogs.com/reference/c/string.h/strcmp.php?alias=strncmp

 #include  #include  int main() { // define two strings s, t and initialize s char s[10] = "testing", t[10]; // copy s to t strcpy(t, s); // test if s is identical to t if (!strcmp(s, t)) printf("The strings are identical.\n"); else printf("The strings are different.\n"); return 0; } 

Puedes usar strncmp :

 if (!strncmp(sub_str[j], "max_n=20", 9)) { 

Tenga en cuenta que el 9 es la longitud de la cadena de comparación más el '\0' final. strncmp es un poco más seguro que strcmp porque especifica cuántas comparaciones se harán como máximo.