我正在使用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);
}
}
}
答案 0 :(得分:3)
您实际上没有为z分配任何空间来指向。因此,它是一个狂野的指针,并尝试将任何内容分配给它所指向的内容 - 从不介意一个或两个字符之后 - 会有未定义的结果,可能是抨击或被其他数据抨击。
将内容放入内存时,请保留内存以将其放入内存中。无论是malloc,还是保留一个数组或其他内存块,并在其开头指向z。
答案 1 :(得分:2)
您从未初始化z
指针的值。它可能指向无效的内存,并且您的程序可能会遇到未定义的行为。
在为z分配数组时再次尝试指向
char buffer[10];
char *z = buffer;
或
char z[10]