【发布时间】: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