我在C中使用ascitime函数
#include <time.h>
char *asctime(const struct tm *timeptr);
returns something like:
Sun Sep 16 01:03:52 1973\n\0
它返回这个“字符串”(或者字符 *):
Sun Sep 16 01:03:52 1973\n\0
我该如何去掉这个字符串中的 "\n"?我不想要造成"\n"的换行。谢谢。
其他答案看起来过于复杂。你的情况很简单,因为你知道不想要的字符是字符串中的最后一个字符。
char *foo = asctime();
foo[strlen(foo) - 1] = 0;
这会将最后一个字符(\n)设置为 null。
接受答案后
接受的答案 看起来过于复杂。asctime()
返回一个长度为26的固定大小数组的指针,格式为:
> Sun Sep 16 01:03:52 1973\n\0
> 0123456789012345678901234455
char *timetext = asctime(some_timeptr);
timetext[24] = '\0'; // being brave (and foolish) with no error checking
去除可能存在的(尾部)'\n'
的通用解决方案,适用于更加复杂的字符串:
char *some_string = foo();
char *p = strchr(str, '\n'); // finds first, if any, \n
if (p != NULL) *p = '\0';
// or
size_t len = strlen(str);
if (len > 0 && str[len-1] == '\n') str[--len] = '\0';
// or
str[strcspn(str,"\n")] = '\0';
str[strlen(str) - 1]
在确定strlen(str) > 0
之前是不安全的。
\n
。int i;
for(i = 0;; i++) {
if(str[i] == '\n') {
str[i] = '\0';
break;
}
}
或者,您可以从tm结构
中手动读取信息。
static void debug_printf(const char *format, ...)
{
va_list arglist;
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "%.24s: ", asctime (timeinfo) );
va_start( arglist, format );
vprintf( format, arglist );
va_end( arglist );
}
你可以使用 strtok
函数在 "\n"
上分割字符串,然后将标记连接起来。
char *
,但那是因为 strtok 函数期望一个 const char *
作为参数。'\n'
字符将无法作为参数使用。但是为了避免混淆,我会删除单词 "character"。 - twain249printf("The time is: %s.", strtok(asctime(timeinfo), "\n"));
asctime()
。 - chux - Reinstate Monica