如何从c中的字符串中删除“\ n”?

时间:2012-03-09 03:45:20

标签: c string

我在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

6 个答案:

答案 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"));