Обычно вы можете использовать strncmp
с максимальной длиной фиксированного размера буфера.
Но, возможно, вы несколько ограничены, особенно если учесть, что работаете во встроенной среде. Он также может не подходить для сравнения строк с пробелами, где каждая строка имеет различное количество пробелов в конце (в том числе ни один для такой строки, как «формальдегид») - strncmp
не будет хорошо работать для сравнения "Hello"
и {'H','e','l','l','o',' ',' ',' '}
если размер 8
.
Если бы это было так, я бы посмотрел на что-то вроде следующего:
#include <stdio.h>
int compStr (char *s1, char *s2, size_t sz) {
while (sz != 0) {
// At end of both strings, equal.
if ((*s1 == '\0') && (*s2 == '\0')) break;
// Treat spaces at end and end-string the same.
if ((*s1 == '\0') && (*s2 == ' ')) { s2++; sz--; continue; }
if ((*s1 == ' ') && (*s2 == '\0')) { s1++; sz--; continue; }
// Detect difference otherwise.
if (*s1 != *s2) return 0;
s1++; s2++; sz--;
}
return 1;
}
int main (void) {
printf ("%d\n", compStr ("Hello", "Hello", 5));
printf ("%d\n", compStr ("Hello", "Hello ", 5));
printf ("%d\n", compStr ("Hello ", "Hello", 5));
printf ("%d\n", compStr ("Hello ", "Hello ", 5));
printf ("%d\n", compStr ("HelloX", "Hello", 5));
printf ("%d\n", compStr ("HelloX", "HelloY", 5));
printf ("%d\n", compStr ("HelloX", "HelloY", 6));
return 0;
}
Это будет соответствовать строкам с любым количеством пробелов в конце, вплоть до определенного размера, и имеет преимущество в том, что вы можете передавать ему произвольные буферы вместо того, чтобы предполагать, что один является глобальной областью.
Кроме того, не рекомендуется использовать стандартную библиотечную функцию, например strlen
, в качестве имени переменной, так как вы можете захотеть. в какой-то момент используйте стандартную библиотеку.