注册 登录
编程论坛 C++教室

关于字符串的剪裁的问题。

zqmillet 发布于 2011-01-28 16:06, 675 次点击

    char * str;
    str = "0123456789";

我现在想把6以后的部分去掉,只留下“0123456”,我是这样写的代码:

    *(str + 7) = '\0';

可以实现功能,但是我想问下,6以后的那部分内存系统会回收吗?
如果不能回收要怎样修改代码?
6 回复
#2
hellovfp2011-01-28 17:56
最好不要直接修改源字符串。
读一下strncpy这些函数的源代码,看看别人是如何实现的。
#3
zqmillet2011-01-28 19:46
以下是引用hellovfp在2011-1-28 17:56:05的发言:

最好不要直接修改源字符串。
读一下strncpy这些函数的源代码,看看别人是如何实现的。

百度了下,找到了一段代码:
程序代码:

char * strcpy(char * strDest,const char * strSrc)

        {

                if ((strDest==NULL)||(strSrc==NULL)) //[1]

                        throw "Invalid argument(s)"; //[2]

                char * strDestCopy=strDest;  //[3]

                while ((*strDest++=*strSrc++)!='\0'); //[4]

                return strDestCopy;

        }


这段代码我是看懂了,但是
我就是想知道6之后的内存会浪费了吗?
#4
pangding2011-01-28 22:14
字符串常量应该不能改吧?你那个代码编译或者执行的时候没什么问题吗?
#5
zqmillet2011-01-28 22:40
以下是引用pangding在2011-1-28 22:14:34的发言:

字符串常量应该不能改吧?你那个代码编译或者执行的时候没什么问题吗?

程序代码:

/*

 * 去掉右边的字符c

 
*/
void Formula::TrimEnd (const char c)
{
    for (int i = strlen(formulaString) - 1 ; i >= 0 ; i--)
    {
        if (*(formulaString + i) != c)
        {
            *(formulaString + i + 1) = '\0';
            break;
        }
    }
    return;
}

formulaString是Formula的成员变量
类型为char * formulaString
我试着写TrimEnd这个函数,其中
*(formulaString + i + 1) = '\0';

把后面的部分去掉了。
编译器是vc6.0,通过编译,无错无警告,功能也能实现
我担心的是'\0'后面的部分会不会造成内存浪费?
#6
pangding2011-01-28 22:59
虽然系统不回收,但栈上的空间不怕浪费。只是字符串常量可能在只读段里,一般改不了。能改就好,没什么问题。
#7
zqmillet2011-01-28 23:06
以下是引用pangding在2011-1-28 22:59:09的发言:

虽然系统不回收,但栈上的空间不怕浪费。只是字符串常量可能在只读段里,一般改不了。能改就好,没什么问题。

谢谢热心解答,结贴喽~
1