我在C
中使用函数ascitime #include <time.h>
char *asctime(const struct tm *timeptr);
returns something like:
Sun Sep 16 01:03:52 1973\n\0
返回此&#34;字符串&#34;(resp.char *):
Sun Sep 16 01:03:52 1973 \ n \ 0
我怎样才能摆脱&#34; \ n&#34;从这个字符串?我不想要下一行导致&#34; \ n&#34;。 THX
答案 0 :(得分:16)
其他答案似乎过于复杂。你的情况很简单,因为你知道不需要的字符是字符串中的最后一个字符。
char *foo = asctime();
foo[strlen(foo) - 1] = 0;
这会使最后一个字符(\ n)为空。
答案 1 :(得分:3)
接受答复后
accepted answer似乎过于复杂。 asctime()
以下列形式返回指向 fixed 大小为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';
在第一次建立str[strlen(str) - 1]
之前, strlen(STR) > 0
不安全。
答案 2 :(得分:1)
为什么不使用最大宽度的printf?看到你打电话给printf ......
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 );
}
答案 3 :(得分:0)
您可以使用strtok
拆分"\n"
上的字符串并连接令牌。
答案 4 :(得分:0)
据我所知,你不能让它在没有换行符的情况下返回字符串。您需要使用一些基本循环来剥离\n
。
int i;
for(i = 0;; i++) {
if(str[i] == '\n') {
str[i] = '\0';
break;
}
}
或者,您可以从tm struct
手动阅读信息。
答案 5 :(得分:-1)
如果你想用1行代码:
printf("The time is: %s.", strtok(asctime(timeinfo), "\n"));