最简单的解决方案是可能只是按字符处理字符串,包含源和目标的指针:
#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基于解决方案,因为库函数很可能会被优化.
| 归档时间: |
|
| 查看次数: |
22176 次 |
| 最近记录: |