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

use*_*772 9 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
Run Code Online (Sandbox Code Playgroud)

它返回这个"字符串"(resp.char*):

Sun Sep 16 01:03:52 1973 \n\0

怎么能从这个字符串中删除"\n"?我不希望nextline导致"\n".谢谢

blu*_*ift 19

其他答案似乎过于复杂.你的情况很简单,因为你知道不需要的字符是字符串中的最后一个字符.

char *foo = asctime();
foo[strlen(foo) - 1] = 0;
Run Code Online (Sandbox Code Playgroud)

这会使最后一个字符(\n)为空.

  • @ twain249正确,这就是所需要的(man asctime) (3认同)
  • 仅适用于\n作为倒数第二个字符而不是任意\n字符 (2认同)
  • @blueshift是的,这真的是我需要的全部因为我在服务器日志中的消息之前使用它像timestamp.多谢 ;-) (2认同)

chu*_*ica 5

接受答案后

接受的答案似乎过于复杂。 以下列形式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  
Run Code Online (Sandbox Code Playgroud)

消除'\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';
Run Code Online (Sandbox Code Playgroud)

str[strlen(str) - 1]在第一次建立之前是不安全的strlen(str) > 0