我找到了一个设置文件日期和时间的示例。任何人都可以解释这个循环:
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>
答案 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
}