http://stackoverflow.com/questions/122616/how-do-i-trim-leading-trailing-whitespace-in-a-standard-way
关于去除字符串的頭尾的空格键(思路可以扩展到其他的符号)。
分为两种情况,
1. 第一种为可以对此字符串改变的,如字符数组,堆中(calloc和malloc)分配的空间,还有一些buffer(TCP传过来的,不过也是通过以上方法来放的,只是感觉分一下,呵呵)。
char *trimwhitespace(char *str) { char *end; // Trim leading space while(isspace(*str)) str++; if(*str == '\0') // All spaces? return str; // Trim trailing space end = str + strlen(str) - 1; while(end > str && isspace(*end)) end--; // Write new null terminator *(end+1) = '\0'; return str; }
char *trimwhitespace(char *str) { char *end; // Trim leading space while(isspace(*str)) str++; if(*str == '\0') // All spaces? return str; // Trim trailing space end = str + strlen(str) - 1; while(end > str && isspace(*end)) end--; // Write new null terminator *(end+1) = '\0'; return str; } size_t trimwhitespace(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; }
看老外的讨论,对第一个有疑义,就是假如你传入的是动态生成的,那么你需要自己在main函数(假设在main里面调用)自己free掉,不然内存泄漏了~~~当然数组无所谓了~~~
恩,最好在注释里面说明下~~~
ps:大家看看有没有bug~~~