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.