有人可以帮我在这段代码C编程中发现错误

时间:2018-04-30 04:20:19

标签: c

我尝试在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 [])?

1 个答案:

答案 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,则会覆盖未定义行为的数组边界。