@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;
}
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@vanyamba-electronics
#include <string.h>
...
if (strcmp(Name, Surname) == 0) {
    ....
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 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()
Числовые - перебором по значению
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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