这段代码是如何工作的?

时间:2014-03-30 20:15:53

标签: c arrays char return

char *My_Time(FILE *prnt) 
{
  time_t raw_Time = time(0);
  struct tm *info;
  char myt_Time[80];

  info = localtime(&raw_Time);
  return asctime(info);// Returns the time i want 
}

int Crte_acclg (FILE *crte_Fp1)
{
  char *my_Currtime;
  my_Currtime = My_Time(crte_Fp1);    // succesfully stores the time i want without having a array of chars?
  fprintf(crte_Fp1,"File Created: %s",my_Currtime);
  return 1;
}

所以在上面的代码中我要求我的时间返回当前时间,并将其存储在char *中。我的问题是这行代码是如何工作的,因为我收回了一串字符,那么为什么当我指向Char位置时它能够给我完整的字符串呢?

2 个答案:

答案 0 :(得分:0)

有许多类型的字符串,标准C字符串是具有标记值0的序列。

char*返回指向此序列的点,相当于指向其第一个元素。

asctime()可以安全地返回这个指针,因为它使用了足够大的内部静态缓冲区,并且你承诺使用它永远不会同时使用它,也不会在调用另一个标准函数后依赖于返回的值允许使用此缓冲区。

除此之外:Best获得标准C99 with Technical corrigenda TC1, TC2, and TC3 included(从维基百科复制的链接)。

答案 1 :(得分:0)

字符串只不过是内存中某处的字符序列。当你有一个指向字符串的指针时,它指向字符串中的第一个字符。

假设我们有这样的字符串:

char someString[] = "Hello world";

在内存中它看起来像这样:

+-----------------+
| "Hello world\0" |
+-----------------+

现在有一个指向此字符串的指针

char *pointerToString = someString;

就像

+-----------------+     +-----------------+
| pointerToString | --> | "Hello world\0" |
+-----------------+     +-----------------+

asctime函数在上面的示例中有一个类似于someString的数组。该数组声明为static,这意味着一旦函数返回它就不会超出范围。当数组衰减为指针时,这意味着当asctime返回数组时,它将变成指向该数组中第一个字符的指针,并且它是您可以查看和使用的指针。

相关问题