问问string变量转char数组

rorriM 2010-10-24 11:03:30

const char *temp = string.c_str();

除了上面的没有其他方法了吗?

我不想转成const的。因为如下的原因:


for(i循环){
const char *temp = string[i].c_str();
cout<<sizeof(temp)<<endl;
}
为什么我用 sizeof(temp)求长度时输出的都是第一个temp的长度?


求答案。谢谢!
...全文
2606 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dooX8086 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 rorrim 的回复:]

谢谢大家。

引用 9 楼 doox8086 的回复:
如查单纯求长度
string.size();
数组就是
string[i].size();


假设我一个数组string[100],只有前20个有内容,那么它的实际长度怎么求呢?
[/Quote]

string[100] 这个100 跟 string(字符串) 的长度是两码事, string.size() 就是字符串的实制长度

string strArr[100];

strArr[0] = "ccav"; //strArr[0].size() 4
strArr[1] = "cccaaavvv"; //strArr[1].size() 12
......
strArr[20] = "xxxxxxxxxx"; //strArr[20].size() 10


strArr[21].size() // 0
rorriM 2010-10-25
  • 打赏
  • 举报
回复
谢谢大家。

[Quote=引用 9 楼 doox8086 的回复:]
如查单纯求长度
string.size();
数组就是
string[i].size();
[/Quote]

假设我一个数组string[100],只有前20个有内容,那么它的实际长度怎么求呢?
dooX8086 2010-10-25
  • 打赏
  • 举报
回复
如查单纯求长度
string.size();
数组就是
string[i].size();

如果是要copy一分到 char[] 就:
char[]

strcpy(char, string.c_str());
没事数数钱 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rorrim 的回复:]

另外,你的temp是一个指针,那么sizeof(temp)就是4(对于32位而言)。
原来是这样。

请问c++有自带方法求出tmp的实际字符长度吗?
[/Quote]
const char *temp = string.c_str();//这个本身就有问题,
string.c_str()返回的是一个字符串,要定义一个字符数组来接收才行


cout<<sizeof(*temp)<<endl;
黑娃 2010-10-25
  • 打赏
  • 举报
回复
请问c++有自带方法求出tmp的实际字符长度吗?

不就是strlen嘛
huanmie_09 2010-10-25
  • 打赏
  • 举报
回复
请问c++有自带方法求出tmp的实际字符长度吗?
c语言:
#include<string.h>

len = strlen(tmp);
fthislife 2010-10-25
  • 打赏
  • 举报
回复
可以用const_case来解除const的,如:
string str="sdfsdf";
char *p=const_case(str.c_str());
rorriM 2010-10-24
  • 打赏
  • 举报
回复
另外,你的temp是一个指针,那么sizeof(temp)就是4(对于32位而言)。
原来是这样。

请问c++有自带方法求出tmp的实际字符长度吗?
密斯刘 2010-10-24
  • 打赏
  • 举报
回复

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main()
{
string str[2];
str[0] = "csdn.net";
str[1] = "helloworld!!!";
for(int i = 0; i < 2; ++i)
{
char tmp[256];
strcpy(tmp, str[i].c_str());
cout << sizeof(tmp) << endl;
}

return 0;
}


建议你复制string.c_str()到char数组,如果你用指针直接指过去,当string的内容发生变化时,指针就失效了,操作很有可能造成程序崩溃。

另外,你的temp是一个指针,那么sizeof(temp)就是4(对于32位而言)。
如果tmp是个数组的时候,才输出数组的大小。str.data()也可以返回内容,但是解围没有'\0',也就是说,不是c风格字符串
rorriM 2010-10-24
  • 打赏
  • 举报
回复
谢谢。
我试试
Kyle__Shaw 2010-10-24
  • 打赏
  • 举报
回复
#include<iostream>
#include<vector>
using namespace std;

void main()
{
string s = "abcdefg";
char arr[7];
for(int i=0;i<7;i++)
arr[i]=s[i];
for(i=0;i<7;i++)
cout<<arr[i];
cout<<endl;
}


这样可以吗?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧