【发布时间】:2019-07-06 16:10:08
【问题描述】:
我正在按照 rpcgen 教程制作一个小型的“远程过程调用”实用程序,客户端在该实用程序中向服务器发送请求,然后服务器以数据格式的字符串进行响应。 返回字符串是通过使用 strftime() char 数组并用格式化的时间填充的。然后将 char 数组,t 或 s 分配给 *ptr,其地址作为 return(&ptr) 返回。 奇怪的是,当我使用 static char t 时,该函数起作用并且我能够接收到正确的字符串。但是,如果我在尝试使用返回的字符串时使用非静态 char s[100],它会出现乱码或随机字符和非字符。 对于非静态情况,我不再重写它,那为什么要这样做呢? 另外我不确定函数定义返回值是否是双指针**的含义,但我实际上用 &ptr 返回了一个单指针*。
char **menuitem_1_svc(char *argp, struct svc_req *rqstp)
{
struct tm *timeptr;
time_t clock;
static char *ptr;
static char err[] = "Invalid Response \0";
char t[100];
static char s[100];
clock = time(0);
timeptr = localtime(&clock);
//Use static char[] s or char[] t both seem to work here
strftime(s,100,"%A, %B %d, %Y - %T",timeptr);
/* This block is just an example. ptr is only assigned to s or t.
//This works
ptr =s;
//This doesn't
ptr = t;
*/
return(&ptr);
}
【问题讨论】: