我正在使用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);
        }

    }
}

最佳答案

实际上你还没有为z指定任何空间。因此,它是一个野生指针,并试图将任何内容赋给它所指向的对象(不必考虑其后的一两个字符)都将产生未定义的结果,可能是抨击或被其他数据抨击。
当把东西放进记忆中时,要保留记忆。要么是malloc,要么是保留一个数组或其他内存块,并在其开头指向z。

08-16 20:07