|
发表于 2023-11-23 21:57:48
|
显示全部楼层
本楼为最佳答案
本帖最后由 jackz007 于 2023-11-23 22:17 编辑
由于在函数调用结束的时候,在属于函数的所有东西中,除了静态变量能够得以保存外,其它的东西都会被销毁,当然,这也包括字符串常量。所以,在调用 getChineseWeekday() 的时候,应该 "送" 一个 "容器" 进入函数,以便用来把函数需要返回的字符串 "携带" 出函数。据此,楼主的代码可以这样修改:
这是 dll(被调用方)
- #include <stdio.h>
- #include <string.h>
- #include <windows.h>
- extern __declspec(dllexport) char * getChineseWeekday(char ret[])
- {
- char WD[][8] = {{"星期日"} ,\
- {"星期一"} ,\
- {"星期二"} ,\
- {"星期三"} ,\
- {"星期四"} ,\
- {"星期五"} ,\
- {"星期六"}} ;
- SYSTEMTIME sys1 ;
- GetLocalTime(& sys1) ;
- strcpy(ret , WD[sys1 . wDayOfWeek]) ;
- return ret ;
- }
复制代码
这是调用方的代码
- #include <stdio.h>
- extern __declspec(dllexport) char * getChineseWeekday(char *) ;
- int main(void)
- {
- char s[16] ;
- printf("今天是【%s】\n" , getChineseWeekday(s)) ;
- }
复制代码
以上代码在 Windows 10 x64 操作系统平台上,使用 tdm-gcc 10.3.0-2 x64 编译器编译通过。 |
|