我尝试在C语言编程练习中解决问题,但我不知道我对这些代码中的错误的看法是否正确。
练习说:这段代码有什么问题。 1)
void main()
{
int variable = 0x1;
int *puntero = &variable;
{
int ch = 0x10;
puntero = &ch;
}
printf("%x\n", *puntero);
}
在第一段代码中,我认为那些说“&* 39; int * ptr =& var;'因为它无效放* ptr =& var。
#define Tam_buffer 10
int main(int argc, char *argv[])
{
char buffer[Tam_buffer];
strcpy(buffer, argv[1]);
printf("buffer= %s\n", buffer);
return 0;
}
在第二个我不知道miskate在哪里可能是因为在main函数中有int main(int argc,char * argv [])?
答案 0 :(得分:0)
{和}创建值int ch
所属的本地范围。
{
int ch = 0x10;
puntero = &ch;
}
printf("%x\n", *puntero);
因此,在第一个函数中,puntero
的最终值指向不再在范围内的变量。这是未定义的行为。
在第二种情况下,您可能会调用strcpy缓冲区溢出。
char buffer[Tam_buffer];
strcpy(buffer, argv[1]);
如果argv[1]
中的字符串长度大于Tam_buffer-1
,则会覆盖未定义行为的数组边界。