如何从C中的字符串中删除回车?

sye*_*uhd 1 c string carriage-return

可能重复:
从C中的字符串中删除字符

你有一个C代码的例子来删除字符串中的回车吗?

pax*_*blo 8

最简单的解决方案是可能只是按字符处理字符串,包含源和目标的指针:

#include <stdio.h>
#include <string.h>
int main (void) {
    char str[] = "This is a two-line\r\nstring with DOS line endings.\r\n";
    printf("%d [%s]\n",strlen(str), str);

    // ========================
    // Relevant code in this section.
    char *src, *dst;
    for (src = dst = str; *src != '\0'; src++) {
        *dst = *src;
        if (*dst != '\r') dst++;
    }
    *dst = '\0';
    // ========================

    printf("%d [%s]\n",strlen(str), str);
}
Run Code Online (Sandbox Code Playgroud)

这最初设置了两个指针.然后它复制一个字符并始终前进源指针.但是,如果字符不是回车符,它只会使目标指针前进.这样,所有回车都被下一个字符或空终止符覆盖.输出是:

51 [This is a two-line
string with DOS line endings.
]
49 [This is a two-line
string with DOS line endings.
]
Run Code Online (Sandbox Code Playgroud)

这对于大多数琴弦来说都是足够的.如果你的字符串真的很大(或者你需要每秒做很多次),你可以看一下strchr基于解决方案,因为库函数很可能会被优化.