谁能告诉我下面这段代码为什么有问题?
从同事处得到一段C语言代码样例,主要是测试一个去除字符串首尾空格和控制符函数的正确性:
#include <string.h>#include <stdlib.h>#include <stdio.h>char *Trim(char *data){ if (data && strlen(data)) { int begin = 0; int end = strlen(data) - 1; while (begin <= end && data[begin] <= ' ') ++begin; if (begin > end) data[0] = '\0'; else{ while (data[end] <= ' ') --end; memmove(data, data + begin, end - begin + 1); data[end - begin + 1] = '\0'; } } return data;}int main(int argc, char* argv[]){ int i; char *data[7] = {"", " ", "0", "01234", " 01234", "01234 ", " 01234 "}; for (i=0;i<7;i++) { printf("len = %d, %s\n", strlen(data[i]), Trim(data[i])); } return 0;}#include <string.h>#include <stdlib.h>#include <stdio.h>char *Trim(char *data){ if (data && strlen(data)) { int begin = 0; int end = strlen(data) - 1; while (begin <= end && data[begin] <= ' ') ++begin; if (begin > end) data[0] = '\0'; //修改了常量字符串的值,肯定会导致程序出错··· else{ while (data[end] <= ' ') --end; memmove(data, data + begin, end - begin + 1); data[end - begin + 1] = '\0'; } } return data;}int main(int argc, char* argv[]){ int i; char *data[7] = {"", " ", "0", "01234", " 01234", "01234 ", " 01234 "}; for (i=0;i<7;i++) { printf("len = %d, %s\n", strlen(data[i]), Trim(data[i])); } return 0;}
[解决办法]
有问题。Trim函数没有考虑到ASCII码的127也是不可打印字符,main函数更有问题,字符串常量是不可修改的
[解决办法]