使用C设置文件名的日期和时间

时间:2018-03-23 17:35:38

标签: c time

我找到了一个设置文件日期和时间的示例。任何人都可以解释这个循环:

for (; *p; ++p)
{
    if (*p == ' ')
          *p = '_';
}

...手段?

/* ctime example */
    #include <stdio.h>      /* printf */
    #include <time.h>       /* time_t, time, ctime */

    int main ()
    {
      time_t rawtime;
      char buffer [255];

      time (&rawtime);
      sprintf(buffer,"/var/log/SA_TEST_%s",ctime(&rawtime) );
    // Lets convert space to _ in

    char *p = buffer;
    for (; *p; ++p)
    {
        if (*p == ' ')
              *p = '_';
    }



      printf("%s",buffer);
      fopen(buffer,"w");

      return 0;
    }

当我执行此程序时,文件名没有'_',而是它有空格,即使程序声明' ''_'替换。< / p>

2 个答案:

答案 0 :(得分:1)

如果p是指向字符串的指针,则循环for (; *p; ++p)将遍历字符串的字符;请注意,条件*p表示“只要p当前指向的值不等于0(即字符串终止字符)”,并且++p将指针移动到下一个角色。 表达式if (*p == ' ') *p = '_'仅表示“如果当前字符为空,请将其替换为'_'”。

如果您的文件名仍包含“空白”,则可能是这些空白不是' '而是其他字符闪烁为空白(例如,标签'\t') 。您可以使用if (isblank(*p)) *p = '_'代替;你可以添加if (*p == '\n') { *p=0; break; }以消除新行并在这种情况下截断文件名。

答案 1 :(得分:0)

此循环遍历buffer以用下划线替换空格。

说明:

char *p = buffer; // `p` is a pointer to the beginning of `buffer`
for (; *p ; ++p) // Increment `p` to point to the next character, until a `\0` is reached
{
    if (*p == ' ') // Check if the character at pointer `p` is a space
        *p = '_'; // If so, replace it by an underscore
}