@D9koder

Почему данный код не срабатывает?

Как это понять? Массивы же идентичны, почему код не работает?
#include <stdio.h>
 
int main(void)
{
	char Name[6] = {'A','n','t','o','n','\0'};
	char Surname[6] = {'A','n','t','o','n','\0'};
	
	if(Name == Surname)
	{
		printf("Yes\n");
	}
	else
	{
		printf("No");
	}

    return 0;
}
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 3
wisgest
@wisgest
Не ИТ-специалист. Рабочий. Шизоидный психопат.
Массив в выражении является указателем на свой 0-й элемент. Это то же самое, если бы в условии было &Name[0] == &Surname[0] — указатели указывают на разные адреса.
Ответ написан
myjcom
@myjcom
Так ты сравниваешь указатели.
Строки сравнивать нужно поэлементно.
https://en.cppreference.com/w/c/string/byte/strcmp

Пиши сразу char* s = "Anton";
Ответ написан
CityCat4
@CityCat4
Если я чешу в затылке - не беда!
Потому что так нельзя.

С - это не Perl, это низкоуровневый язык. Работая с массивами, нужно хорошо знать тему указателей, чтобы не задавать таких вопросов.
Имя массива - это указатель на его первый элемент. То, что такая программа вообще собирается - это уступка ламерам, по идее тут ошибка должна выдаваться, чтобы давать по рукам сразу. В данном случае сравниваются два указателя, а они естественно разные.

Строковые массивы можно сравнивать через strncmp()
Числовые - перебором по значению
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы