Это из-за этой строки:
printf ("Hi %s,</br />", $name);
Вы не должны печатать / эхо ничего, прежде чем отправлять заголовки.
*
перед символом означает нечто совершенно иное в объявлении и в теле функции.
int *x;
- объявляет указатель на объект int
y = *x;
- *
разыменовывает указатель x
, он противоположен его значению в объявлении. Он устраняет один уровень косвенности, когда в объявлении он добавляет один уровень.
Я думаю, что это причина вашего замешательства.
в вашем примере if (*str1 == *str2)
*
«убирает» косвенность, и результатом является сам символ (не указатель на указатель)
str1
указывает на «Эй, ты».
str2
указывает на «Привет! Ты»
*str1
является char
по этому адресу . По сути, это первая буква строки: «H». Первая буква str2 также является «H». Следовательно, (*str1 == *str2)
является истинным выражением, поскольку ('H' == 'H')
Для сравнения двух строк:
strcmp(str1, str2)
- возвращает 0, если одинаковое содержимое, ненулевое в противном случае.
Нигде в вашем коде нет **str1 and **str2
. Я думаю, вы спрашиваете, почему это правда if (*str1 == *str2)
? Этот код проверяет символ , на который указывают str1
и str2
. Так как это 'H'
, в обоих случаях выражение оценивается как истинное.
Если вы хотите сравнить строки в стиле C, вы используете strcmp
, который возвращает ноль, если две строки равны.
if (strcmp(str1, str2) == 0)
{
printf ("HoHoHo!");
}