删除C中的新行字符

删除C中的新行字符,c,C,我试图使用getc(character)从文件中获取一个元素并对其进行处理,但在满足行尾之前,它必须有一个'\n' 我如何删除它,以便在复制字符时,不会在任何地方出现新行字符-从而允许我在选择时打印新行?您可以用空终止符替换它 这里有一个(简单的)方法可以在我的头顶上完成: mystr[ strlen(mystr) - 1 ] = '\0'; 假设buf是char类型,并且它保存从文件中读取的字符串值 buf[strlen(buf)-1] = '\0'; buf[strlen(buf)-1]

我试图使用
getc(character)
从文件中获取一个元素并对其进行处理,但在满足行尾之前,它必须有一个
'\n'


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

您可以用空终止符替换它

这里有一个(简单的)方法可以在我的头顶上完成:

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

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

buf[strlen(buf)-1] = '\0'; buf[strlen(buf)-1]='\0'; 将缓冲区的最后一个字符设置为nul,即“\0”,以删除新行字符

编辑:由于loz提到了一个编译器错误,我怀疑它是使用了
const char*
…我们能看看代码吗…

.
.
.
#include <string.h>
.
. /* insert stuff here */
.
char* mystring = "THIS IS MY STRING\n"
char* deststring;
.
.
.
strncpy(deststring, mystring, strlen(mystring)-1);
.
.
.
. . #包括 . . /* 在这里插入内容*/ . char*mystring=“这是我的字符串\n” 字符*字符串; . . . strncpy(deststring,mystring,strlen(mystring)-1); . . .

(作为补充说明,我不太喜欢在这样的字符串中删除\0个字符。当您开始使用i18n时,它不起作用,而且字符宽度不固定。例如,UTF-8可以在任何地方使用每个“字符”1到4个字节)。

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

下面的操作就可以了

line[strlen(line) - 1] = 0

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

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

更完整的版本:

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

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

不,不是这样,我在做homeworkloz时总是在帖子中说:请编写代码!?!在我们不知道的情况下对每个人的答案进行否决是不公平的…@tommieb75:loz没有投反对票(他仍然是0,正在学习如何这样做)这会导致一个错误,即传递strlen的arg 1会使指针从整数变为整数,而不使用cast。在使用nuking之前,您不应该验证字符是否为lf吗?在您的雇主决定国际化并且您的字符串成为UTF-8编码之前,它可以正常工作。谁对此投了反对票?如果loz没有发布代码,我们将自食其果……我们如何提供支持sed想知道…你不应该在核化字符之前验证字符是lf吗?在你的雇主决定国际化并且你的字符串变成UTF-8编码之前,它可以正常工作。对,但是你的解决方案也有同样的问题。通常你需要使用一组不同于str*系列的函数来处理unicode。例如,在Win32编程中使用wcscpy而不是strcpy。无论如何,这只是一个简单的例子。@lexu-你的意思是代码应该检查被替换的字符是否是换行符吗?是的,这可能是个好主意。但是,所有的解决方案或多或少都假设他的代码已经在执行该检查。这就是Kernighan&Pike的意思建议是惯用的——在他们编写P26P的实践中,如果他使用的是getc,那么在这样做时,最好不要将字符复制到缓冲区中。@Hector,现在,我添加了描述。