Я запускаю свой код в SUSE Linux. У меня есть указатель, который я делаю = NULL в функции. Но проблема возникает, когда я пытаюсь сравнить тот же указатель с NULL в цикле while. Это приводит к сбою программы. Я воспроизвел свою проблему в примере кода ниже. Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит?
Мой код выглядит следующим образом:
#include <stdio.h>
int func(char *,int);
int main()
{
char buffer[20];
int i =20;
int temp = func(buffer,i);
if ( (temp == 0) && (buffer != NULL) )
{
printf("inside loop \n");
}
}
int func(char *ad,int a)
{
ad = NULL;
printf("Integer is %d \n", a);
return(0);
}
Проблема в том, что сравнение buffer != NULL
не работает и управление идет внутри цикла, чего в идеале быть не должно. Я решил это, сделав это:
ad[0] = NULL
и сравнение изменилось на buffer[0] != NULL
.
Поскольку NULL используется только в контексте указателя, это плохой код. Я мог бы использовать '\0' вместо NULL в моем обходном пути и избежать написания "плохого кода", но я действительно хочу знать, что здесь происходит. Может кто-нибудь уточнить?
Большое спасибо, Адитья
NULL
используется для сравнения с указателями. Его макрос заменяется на константу нулевого указателя. Так чтоbuffer[0] != NULL
неверно, потому чтоbuffer[0]
относится к типу данныхchar
. - person Mahesh   schedule 18.02.2011