删除C中的换行符

时间:2010-03-07 14:44:06

标签: c

我正在尝试使用getc(character)从文件中获取元素并对其执行操作,但看起来它必须在行结束之前有'\n'

如何删除它,以便在复制字符时,我没有出现在任何地方的新行字符 - 从而允许我在选择时处理打印新行?

7 个答案:

答案 0 :(得分:6)

.
.
.
#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,for例如,每个“字符”可以使用1到4个字节。)

答案 1 :(得分:4)

要用空格替换所有新行字符,请使用:

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);

答案 2 :(得分:2)

您可以用空终止符替换它。

这是一种(简单)的方式来做到这一点:

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

答案 3 :(得分:2)

嗯,使用getc填充缓冲区并删除换行符和回车字符会有帮助吗?

答案 4 :(得分:1)

假设buf的类型为char,并且它保存从文件读入的字符串值...

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

将缓冲区的倒数第二个字符设置为nul,即'\ 0',以便删除换行符。

编辑:由于loz提到编译器错误,我怀疑它是const char *使用的...我们能否看到代码......

答案 5 :(得分:0)

以下将解决问题

line[strlen(line) - 1] = 0

答案 6 :(得分:0)

更完整的版本:

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

(注意:将null char放入其中会使字符串读取器在该点停止读取,但行的内存占用量相同.'\ 0'右侧的字符仍然存在