代码之家  ›  专栏  ›  技术社区  ›  Biscuit128

删除C中的新行字符

c
  •  4
  • Biscuit128  · 技术社区  · 15 年前

    getc(character) 从文件中获取元素并对其执行操作,但它似乎必须具有 '\n' 在一行的末尾相遇之前。

    我怎样才能删除这个,这样当我复制字符时,我就不会有一个新行字符出现在任何地方-这样我就可以处理打印新行时,我选择?

    7 回复  |  直到 7 年前
        1
  •  3
  •   Gabriel Ščerbák    15 年前

    嗯,使用getc来填充缓冲区并删除换行符和回车符是没有帮助的?

        2
  •  6
  •   JUST MY correct OPINION    15 年前
    .
    .
    .
    #include <string.h>
    .
    . /* insert stuff here */
    .
    char* mystring = "THIS IS MY STRING\n"
    char* deststring;
    .
    .
    .
    strncpy(deststring, mystring, strlen(mystring)-1);
    .
    .
    .
    

    (作为补充说明,我不太喜欢在那样的字符串中删除\0个字符。当你开始做i18n并且字符宽度不固定时,它就不能很好地工作。例如,UTF-8可以使用每个“字符”1到4个字节

        3
  •  5
  •   Nitinkumar Ambekar    9 年前

    char *pch = strstr(myStr, "\n");
    while(pch != NULL)
    {
        strncpy(pch, " ", 1);
        pch = strstr(myStr, "\n");
    }
    

    要删除字符串中第一个出现的新行字符,请使用:

    char *pch = strstr(myStr, "\n");
    if(pch != NULL)
      strncpy(pch, "\0", 1);
    
        4
  •  3
  •   Justin Ethier    15 年前

    可以将其替换为空终止符。

    这里有一个(简单的)方法可以让我从头开始做:

     mystr[ strlen(mystr) - 1 ] = '\0';
    
        5
  •  1
  •   t0mm13b    15 年前

    假设 buf 属于类型 char

    buf[strlen(buf)-1] = '\0';
    

    将缓冲区的最后一个字符设置为nul,即“\0”,以便删除新行字符。

    既然loz提到了一个编译器错误,我怀疑这是一个错误 const char *

        6
  •  0
  •   James Raitsev    14 年前

    下面就可以了

    line[strlen(line) - 1] = 0
    
        7
  •  0
  •   Chris Reid    8 年前

    更完整的版本:

    char* end = line + strlen(line) - 1 ;          // end of line                                                                                                      
    while( (end > line) && isspace(*end) ) end--;  // right trim space                                                                                              
    *(end+1) = '\0';                               // terminate string
    

    (注意:将空字符放入其中会使字符串读取器在该点停止读取,但行的内存占用是相同的。“\0”右侧的字符