【问题标题】:C Error C2040? char *()' differs in levels of indirection from 'int ()'C 错误 C2040? char *()' 与 'int ()' 的间接级别不同
【发布时间】:2012-12-27 12:45:51
【问题描述】:

能否请您修复此代码中的错误我收到此错误error C2040: 'tmFunc' : 'char *()''int ()' 的间接级别不同

#include<stdio.h>
main()
{
    char *tmStamp=tmFunc();
}

char *tmFunc() 
{
    char tmbuf[30];
    struct tm *tm;
    time_t ltime;             /* calendar time */
    ltime=time(NULL);         /* get current cal time */
    tm = localtime(&ltime);
    sprintf (tmbuf, "[%04d/%02d/%02d %02d:%02d:%02d]", tm->tm_year + 1900,
       tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
    return(tmbuf);
}

【问题讨论】:

  • 请同时使用真正的主函数int main(void),并正确缩进代码。
  • 您可能还想考虑在您的tmFunc()函数中返回本地字符缓冲区的地址,除非是静态的,否则(它不是)是未定义的行为。跨度>

标签: c function


【解决方案1】:

因为你没有在使用前声明tmFunc,所以它被隐式声明为一个返回int的函数。

在使用前声明它:

#include<stdio.h>

char *tmFunc();  // declaration

int main()
{
char *tmStamp=tmFunc();
}

【讨论】:

  • 感谢您的回复。这很有帮助。
【解决方案2】:

阳离子:您正在返回地址 (tmbuf) 的局部变量。

  • 应首先将tmbuf[30]; 复制到动态内存中并返回。

  • 还在main() 之前定义了*tmFunc() 函数。

我更正了你的代码:

#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>

char *tmFunc() {
  char tmbuf[30];
  char *buff; 
  struct tm *tm;
  time_t ltime;             /* calendar time */
  ltime=time(NULL);         /* get current cal time */
  tm = localtime(&ltime);
  sprintf (tmbuf, "[%04d/%02d/%02d %02d:%02d:%02d]", tm->tm_year + 1900,
       tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);

       buff = calloc(strlen(tmbuf)+1,sizeof(char));
       strcpy(buff, tmbuf);
       return buff;

  return (buff);
}


int main()
{
   char *tmStamp=tmFunc();
   printf("Time & Date : %s \n", tmStamp);
   free(tmStamp);
   return 1;
}

这实际上工作正常:

:~$ ./a.out 
[2012/12/27 18:28:53]  

存在范围问题。

【讨论】:

  • 感谢您的回复。它在分配内存后工作。
猜你喜欢
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多