我尝试在 C 语言编程练习中解决一个问题,但我不知道我对这段代码中错误的观点是否正确。
练习说:这个代码有什么问题。 1(
void main()
{
int variable = 0x1;
int *puntero = &variable;
{
int ch = 0x10;
puntero = &ch;
}
printf("%xn", *puntero);
}
在第一个代码中,我认为说"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= %sn", buffer);
return 0;
}
在第二个中,我不知道miskate在哪里,因为在main函数中有int main(int argc,char *argv[](?
{ 和 } 创建一个本地作用域,int ch
所属的值。
{
int ch = 0x10;
puntero = &ch;
}
printf("%xn", *puntero);
因此,在第一个函数中,puntero
的最终 vlaue 指向不再在范围内的变量。这是未定义的行为。
在第二个中,您可能有一个缓冲区溢出调用 strcpy。
char buffer[Tam_buffer];
strcpy(buffer, argv[1]);
如果 argv[1]
中的字符串超过 Tam_buffer-1
的长度,您将覆盖数组的边界,这是未定义的行为。