Чтото я не понимаю... тупой наверное...
Нарисуйте плиз другой вариант данной функции... тоже без проверок, чтоб как можно меньше переменных использовалось.
redcat писал(а):Так иначе не будет перебора массива по символам, и while зациклится... Если я всё правильно понял...
zubr писал(а):инкремент раньше разыменовывания сработал.
redcat писал(а):1 - заведомо извесно, что сравниваемые строки не будут пустыми;
2 - Эта функции будет работать быстрее, займёт меньше процессорного времени и памяти (опять-же из-за отсутствия проверки)
int my_strcmp( const char* s1, const char *s2 )
{
if( !s1 || !s2 )
return 0;
while( *s1 == *s2++ )
if( *s1++ == 0 )
return 0;
return ( *( const unsigned char * )s1 - *( const unsigned char * )( s2 - 1 ) );
}
Vooon писал(а):Невнимательно читаешь, и невнимательно работаешь с указателями.
Указатели не простят.
А если понятней: ты инкреметируешь первый символ, а не указатель.
vovan@vovan-book:/tmp$ cat test.c
#include <stdio.h>
int main()
{
char a[]="array";
char * p;
char c;
p=a;
c = *p;
printf("c = '%c'\n", c);
c = *p++;
printf("c = '%c'\n", c);
c = *p++;
printf("c = '%c'\n", c);
return 0;
}
vovan@vovan-book:/tmp$ gcc test.c
vovan@vovan-book:/tmp$ ./a.out
c = 'a'
c = 'a'
c = 'r'
vovan@vovan-book:/tmp$
Vooon писал(а):Инкремент работает раньше, чем обращение по адресу.
Из-за этого твой вариант работает. Но при беглом осмотре запись *p++; заставляет подумать о *p+1;
int StrCompare(const char *str1,const char *str2){
if(!*str1 || !*str2)return 0;
while(*str1){
if(*str1++!=*str2++)return 0;
}
return 1;
}
if (*str1 != *str2) {
return 0;
}
str1++; str2++;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0