【问题标题】:Compile Warning: converting to pointer from integer of different size编译警告:从不同大小的整数转换为指针
【发布时间】:2021-12-30 14:26:35
【问题描述】:

我对 c 的了解很少。

编译时,我收到以下警告:

从不同大小的整数转换为指针

strcpy(aux, (char*)valDate(argv[7]) );

在执行编译后的文件时,我得到这个错误:分段违规。

valDate 函数:

char * valDate(char *date)
{
  char fecha[9];
  sprintf(fecha,"%4.4s%2.2s%2.2s", &date[1], &date[6], &date[9]);
  fecha[8]='\0';
  return (char*)fecha;
}

【问题讨论】:

  • 如果不看 argv[7] 就很难知道。此外,您在 valData 中返回了一个本地指针,这有时可能有效,但不是正确的方法,因为堆栈指针可以在函数调用之间移动,导致您丢失指针或将其覆盖,在您的情况下可能会发生这种情况strcpy
  • return (char*)fecha; 是错误的。你不能返回一个局部变量
  • 试试char fecha[9]; -> char *fecha = malloc(9);
  • argv[7] = 20211201
  • 虽然有时需要,但在您的情况下,您不应该需要您拥有的演员表。添加强制转换以使编译器静音通常是错误的解决方案。

标签: c gcc gcc-warning


【解决方案1】:

您正在返回一个指向函数内部定义的变量的指针。当该函数退出时,该变量可能被破坏/无法访问,即分段违规。

在函数外部定义fecha,并传入一个指针,以便函数可以修改它。

或者在堆上为那个变量分配内存

char *fecha = malloc(sizeof(char) * 9);

注意:无论何时分配内存,您都必须稍后释放该内存。所以只有在合适的情况下才使用它。

【讨论】:

  • malloc 的一个问题是有人稍后必须致电free。谁和什么时候?
  • 好点。我会把它添加到答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 2012-03-04
  • 2019-08-13
相关资源
最近更新 更多