编程论坛
注册
登录
编程论坛
→
C++教室
关于字符串的剪裁的问题。
zqmillet
发布于 2011-01-28 16:06, 675 次点击
char
* str;
str =
"
0123456789
"
;
我现在想把6以后的部分去掉,只留下“0123456”,我是这样写的代码:
*(str +
7
) =
'
\0
'
;
可以实现功能,但是我想问下,6以后的那部分内存系统会回收吗?
如果不能回收要怎样修改代码?
6 回复
#2
hellovfp
2011-01-28 17:56
最好不要直接修改源字符串。
读一下strncpy这些函数的源代码,看看别人是如何实现的。
#3
zqmillet
2011-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
pangding
2011-01-28 22:14
字符串常量应该不能改吧?你那个代码编译或者执行的时候没什么问题吗?
#5
zqmillet
2011-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
pangding
2011-01-28 22:59
虽然系统不回收,但栈上的空间不怕浪费。只是字符串常量可能在只读段里,一般改不了。能改就好,没什么问题。
#7
zqmillet
2011-01-28 23:06
以下是引用
pangding
在2011-1-28 22:59:09的发言:
虽然系统不回收,但栈上的空间不怕浪费。只是字符串常量可能在只读段里,一般改不了。能改就好,没什么问题。
谢谢热心解答,结贴喽~
1