この質問は、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
~~
すべての空白文字を適切にトリミングするようにコードを修正できる人はいますか?
2 番目の質問: 参照されている回答の最初の関数で、segfault が発生します。なぜこれが事実なのか誰か知っていますか?