我正在尝试使用getc(character)
从文件中获取元素并对其执行操作,但看起来它必须在行结束之前有'\n'
。
如何删除它,以便在复制字符时,我没有出现在任何地方的新行字符 - 从而允许我在选择时处理打印新行?
答案 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'右侧的字符仍然存在。