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位置时它能够给我完整的字符串呢?
答案 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
返回数组时,它将变成指向该数组中第一个字符的指针,并且它是您可以查看和使用的指针。