如何将NULL作为返回值?

时间:2014-02-05 19:50:56

标签: c null

我正在使用atmega16并正在编写一个简单的程序进行测试。我发现了那条线

PORTC = *(z+2);

始终打印n而不是0 / ( NULL )它应该是什么......任何人都可以提供帮助?


代码:

int main(void)
{
     char *z;
    DDRC=0xFF;
    while(1)
    {

         *z='o';
         PORTC=*z;
         _delay_ms(24000);
         *(z+1)='n';
         PORTC = *(z+1);
        _delay_ms(24000);
         *(z+2)=0;
         PORTC = *(z+2);
        _delay_ms(24000);
        if(strcmp(z,"on")==0)
        {
            PORTC =0xff;
            _delay_ms(6000);
        }   
        else
        {
            PORTC=0x03;
        _delay_ms(6000);
        }

    }
}

2 个答案:

答案 0 :(得分:3)

您实际上没有为z分配任何空间来指向。因此,它是一个狂野的指针,并尝试将任何内容分配给它所指向的内容 - 从不介意一个或两个字符之后 - 会有未定义的结果,可能是抨击或被其他数据抨击。

将内容放入内存时,请保留内存以将其放入内存中。无论是malloc,还是保留一个数组或其他内存块,并在其开头指向z。

答案 1 :(得分:2)

您从未初始化z指针的值。它可能指向无效的内存,并且您的程序可能会遇到未定义的行为。

在为z分配数组时再次尝试指向

char buffer[10];
char *z = buffer;

char z[10]