如何std:string中存放含有'\0'字符串
4个回答
推荐于2016-02-28
展开全部
char *string="hell oworld!";//这个是字符串常量, 存在文字常量区, 地址受保护,不可以被修改.
另外字符串是以'\0'结尾的, 不能用string!=NULL这个判断字符串是否结束,你这个string是个地址, NULL是个值为0的地址, 应该通过判断字符串结尾的字符来确定字符串有没有结束.
改成如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char string[]="hell oworld!";
char *p=string;
while(*p != '\0')
{
if(*p==' ')
{
while(*p != '\0')
{
*p=*(p+1);
p++;
}
}
else p++;
}
printf("%s\n",string);
return 0;
}
另外字符串是以'\0'结尾的, 不能用string!=NULL这个判断字符串是否结束,你这个string是个地址, NULL是个值为0的地址, 应该通过判断字符串结尾的字符来确定字符串有没有结束.
改成如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char string[]="hell oworld!";
char *p=string;
while(*p != '\0')
{
if(*p==' ')
{
while(*p != '\0')
{
*p=*(p+1);
p++;
}
}
else p++;
}
printf("%s\n",string);
return 0;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
s自身的内存 在结束后 会直接释放
问题是strdup开辟内存 这样做是没法释放的。
C++和C尽量不要混用。
其实 用string s=是没必要用strdup的
比如 存在char a[]="test"
要生成新的 直接string s=a;
这样就可以了。
strdup是C的
需要
char *p=strdup(a);
使用后, 需要 free(p);
问题是strdup开辟内存 这样做是没法释放的。
C++和C尽量不要混用。
其实 用string s=是没必要用strdup的
比如 存在char a[]="test"
要生成新的 直接string s=a;
这样就可以了。
strdup是C的
需要
char *p=strdup(a);
使用后, 需要 free(p);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c++已经做了相应维护,不用操心
转为C
直接string.c_str()即可
转为C
直接string.c_str()即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询