我正在使用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。