C言語には文字列の末尾にある空白を削除する関数やマクロは存在しません.したがってプログラマが自分でこの機能を実装する必要があります.
実装は以下の手順で行うことが出来ます.
以下に実装例を示します.
/*
* 文字列の末尾にある空白を削除する
* @param[in] s 対象文字列
* @return 削除した空白の数を返す
*/
int TrimEnd(char *s) {
int i;
int count = 0;
/* 空ポインタか? */
if ( s == NULL ) { /* yes */
return -1;
}
/* 文字列長を取得する */
i = strlen(s);
/* 末尾から順に空白でない位置を探す */
while ( --i >= 0 && s[i] == ' ' ) count++;
/* 終端ナル文字を付加する */
s[i + 1] = '\0';
return count;
}
上記で定義した TrimEnd 関数を使用して,文字列の末尾にある空白を削除するサンプルプログラムを示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* functions */
int TrimEnd(char *s);
/* main */
int main(void) {
int ret;
char snoopy[] = "SNOOPY ";
ret = TrimEnd(snoopy);
printf("変換後: \"%s\"\n", snoopy);
printf("削除した空白: %d文字\n", ret);
return EXIT_SUCCESS;
}
/*
* 文字列の末尾にある空白を削除する
* @param[in] s 対象文字列
* @return 削除した空白の数を返す
*/
int TrimEnd(char *s) {
int i;
int count = 0;
/* 空ポインタか? */
if ( s == NULL ) { /* yes */
return -1;
}
/* 文字列長を取得する */
i = strlen(s);
/* 末尾から順に空白でない位置を探す */
while ( --i >= 0 && s[i] == ' ' ) count++;
/* 終端ナル文字を付加する */
s[i + 1] = '\0';
return count;
}
サンプルプログラムの実行結果は以下のようになります.
変換後: "SNOOPY" 削除した空白: 3文字