有人可以帮助我找到这个代码C编程中的错误

  • 本文关键字:代码 编程 错误 帮助 c
  • 更新时间 :
  • 英文 :


我尝试在 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 的长度,您将覆盖数组的边界,这是未定义的行为。

最新更新