首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手能告诉小弟我下面这段代码为什么有有关问题

2012-03-31 
谁能告诉我下面这段代码为什么有问题?从同事处得到一段C语言代码样例,主要是测试一个去除字符串首尾空格和

谁能告诉我下面这段代码为什么有问题?
从同事处得到一段C语言代码样例,主要是测试一个去除字符串首尾空格和控制符函数的正确性:

C/C++ code
#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函数到底有没有问题?对,对在哪?错,错在哪?搞得我两晚没睡好。:(

[解决办法]
C/C++ code
#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函数更有问题,字符串常量是不可修改的
[解决办法]
探讨
从同事处得到一段C语言代码样例,主要是测试一个去除字符串首尾空格和控制符函数的正确性:
C/C++ code

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

char *Trim(char *data)
{
if (data &amp;&amp; strlen(data)) {

……

[解决办法]
trim没有问题,你main函数中的字符串必须分配空间,不能是常量字符串。
[解决办法]
定义二维数组,或申请内存的方法都可以。不过,有点不明白控制符的含义?对于去掉空格的话,函数没有问题···
探讨

楼上的各位好:

我是不是可以这样理解,Trim函数本身是没有问题的,而是测试人员的在主函数里的测试用法有问题?

[解决办法]
main函数里char *data[7] = {"", " ", "0", "01234", " 01234", "01234 ", " 01234 "};
是定义7个元素的指针数组,每个元素是一个指针,所以相当于7个指向字符串常量的指针,之后是不能改变常量的值的,可以像上面总结的,用二维数组或动态分配内存,Trim函数没问题
[解决办法]
探讨

楼上的各位好:

我是不是可以这样理解,Trim函数本身是没有问题的,而是测试人员的在主函数里的测试用法有问题?

热点排行