我使用这个问题作为在 C 中修剪字符串的指南。它在完全由空格 ( ' '
) 界定的字符串上正常工作,但在特殊空格 ( '\r'
、'\n'
、 '\t'
等) 上,它会失败。这是一个例子:
#include <stdio.h>
#include <string.h>
size_t trim(char *out, size_t len, const char *str)
{
if(len == 0)
return 0;
const char *end;
size_t out_size;
// Trim leading space
while(isspace(*str)) str++;
if(*str == 0) // All spaces?
{
*out = 0;
return 1;
}
// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace(*end)) end--;
end++;
// Set output size to minimum of trimmed string length and buffer size minus 1
out_size = (end - str) < len-1 ? (end - str) : len-1;
// Copy trimmed string and add null terminator
memcpy(out, str, out_size);
out[out_size] = 0;
return out_size;
}
int main(){
char *str = " \n\n hello \t \r ";
char trimmed[strlen(str)];
trim (trimmed, strlen(trimmed), str);
printf("~%s~\n~%s~\n", str, trimmed);
return 0;
}
产生输出:
~
~ello
~~
任何人都可以修复代码以正确修剪所有空白字符吗?
第二个问题:引用答案中的第一个函数给了我一个段错误。有谁知道为什么会这样?