Ви не увійшли.
Сторінки 1
Но вродебы такого произойти не может, сравниваются два одинаковых по размеру массива. Если такое написать допустим просто на С, думаю будет работать.
Это утверждение неверно, т.к. на C массив это указатель на его первый элемент, если он задан статически (как в этом примере), то его размер знает компилятор на момент сборки, поэтому можно использовать sizeof(n_tel)/sizeof(char). Но компилятор не будет проверять выход за границы массива. Т.е. если строки будут одинаковые - программа пойдет дальше проверять байты (на настольном ПК скорее всего закончится segmentation fault - т.е. попытка прочитать память, которая нам не принадлежит).
И, кстати это все-равно плохой пример, т.к. в 99% случаев сравнивать (в реальной программе) придется динамические строки, о размере которых не знает даже компилятор.
C-строки характеризуются как раз тем, любую строку завершает символ '\0' (числовое значение - 0x00). поэтому функцию сравнения можно организовать следующим образом:
int strcheck(char *str1, char *str2){
int i = 0;
while(str1[i] != '\0' && str2[i] != '\0'){
if(str1[i] != str2[i])
return 0;
i++;
}
//Если мы вышли из цикла значит одну из строк мы перебрали до конца
if(str1[i] == '\0' && str2[i] == '\0')
return 1;
return 0;
}
Функция вернет 1 если строки одинаковые, или 0 - если он отличаются (как по содержимому, так и по длине).
На лаконичность/красоту кода не претендую, хотел только показать как можно работать со строками не зная (заранее) их длину.
Сторінки 1