指针数组怎么求里面字符串的长度?

zhllxt 2008-04-25 06:23:39
char * szTemp[]={"一","一二","一二三"};
cout<<szTemp[0]<<endl<<szTemp[1]<<endl;这样可以正常输出字符串:一 和 一二
cout<<sizeof(szTemp[0])<<endl<<sizeof(szTemp[1])<<endl;我想求里面字符串的长度时却不行,输出总是4,有什么办法求里面字符串长度吗?
...全文
1054 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
我也想了解,谢谢LZ.
walkonthesky 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiaping99 的回复:]
引用 1 楼 baihacker 的回复:
C/C++ code#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char * szTemp[]={"一","一二","一二三"};
cout < <szTemp[0] < <endl < <szTemp[1] < <endl;//这样可以正常输出字符串:一 和 一二
cout < <strlen(szTemp[0]) < <endl < <strlen(szTemp[1]) < <endl;
return 0;
}


求字符串的长度一般用 strlen,
sizeof只是给出…
[/Quote]
rgmcel 2008-04-28
  • 打赏
  • 举报
回复
下面的不知道有没有用,没有用就飘过。
#include <iostream>
using namespace std;
int main()
{
int n=0;
char ch1[10];
char ch2[]="一二三四";
char ch3[]="abcd";
char * stemp[]={ch1,ch2,ch3};

while(*stemp[2]!=NULL)
{
cout<<*stemp[2]++<<endl;
n=n+1;
}
cout<<n<<endl;
return 0;
}
rgmcel 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhllxt 的回复:]
楼上好猛啊,让我迷糊了一会,晕 :)
我的问题还是没有解决,哎,愿意是这样:
char ch1[10],ch2[20],ch3[30];
char * szTemp[]={ch1,ch2,ch3};
cout < <szTemp[0] < <endl < <szTemp[2] < <endl < <strlen( szTemp[0]) < <endl < <strlen( szTemp[2]) < <endl;
这样的话是不行的,
我在VC头文件中字义几个字符数组,在构造函数中可以这样初始化,ZeroMemory(m_ch1,sizeof(m_ch1));
我想使代码简化,就定义指针数组…
[/Quote]

sizeof ()是用来算占内存大小的,你定义了ch1[10],不管你里面是什么东西结果都是10.
另外你定义了指针数组之后,szTemp[0]只是"ch1"的首地址哦。
我也再想你的方法是否可以,关键是找不到szTemp[0]的最后一个字符,不知道用什么?
zhllxt 2008-04-28
  • 打赏
  • 举报
回复
9楼的办法行不通,因为strlen有个要求,就是字符串必须以'\0'结尾,这样的字符串才能被strlen求出长度,否则是求不出长度的,你定义一个字符串但不赋值,用strlen求一下长度就试出来了。

最后一次再问一下,没有办法了么?
Xuon 2008-04-26
  • 打赏
  • 举报
回复
Yes!
你数组的元素就是字符指针
同楼上 你求的是指针的长度
lj56456311 2008-04-26
  • 打赏
  • 举报
回复
指针长度都是为4的,你指针数组里面的元素当然是指针
silendream 2008-04-26
  • 打赏
  • 举报
回复
sizeof()求的是指针的长度
xiaoc10 2008-04-25
  • 打赏
  • 举报
回复
支持strlen。
ps:szTemp[0],szTemp[1]这些都是char型的指针,当然sizeof()会得到4的结果。
FXXBL 2008-04-25
  • 打赏
  • 举报
回复
可以直接利用函数求!
jiaping99 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
C/C++ code#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char * szTemp[]={"一","一二","一二三"};
cout <<szTemp[0] <<endl <<szTemp[1] <<endl;//这样可以正常输出字符串:一 和 一二
cout <<strlen(szTemp[0]) <<endl <<strlen(szTemp[1]) <<endl;
return 0;
}
[/Quote]

求字符串的长度一般用 strlen,
sizeof只是给出该类型的长度~~你的sizeof(szTemp[0])实际上是求的是指针的长度,这里的szTemp[0]是指向字符串的指针
baihacker 2008-04-25
  • 打赏
  • 举报
回复
转换为指针的时候已经没有数组大小的信息了...指针的长度是4
zhllxt 2008-04-25
  • 打赏
  • 举报
回复
只能再定义一个数组保存大小么?别无它法么?
为什么ZeroMemory(m_ch1,sizeof(m_ch1));就可以,而把它放在指针数组里,ZeroMemory(szTemp[0],sizeof(szTemp[0]));就不行了呢?
baihacker 2008-04-25
  • 打赏
  • 举报
回复
定义一个数组,保存m_ch1到m_ch4的大小
zhllxt 2008-04-25
  • 打赏
  • 举报
回复
头文件中char m_ch1[10],m_ch2[20],m_ch3[30],m_ch4[40];

构造函数中
char *szTemp[]={m_ch1,m_ch2,m_ch3,m_ch4};
int count=sizeof(szTemp)/sizeof(char*);
for(int i=0;i<count;i++)
{
ZeroMemory(szTemp[i],sizeof(szTemp[i]));//实际上这句话错了,因为sizeof(szTemp[i])总是4
}
有办法么?
zhllxt 2008-04-25
  • 打赏
  • 举报
回复
楼上好猛啊,让我迷糊了一会,晕 :)
我的问题还是没有解决,哎,愿意是这样:
char ch1[10],ch2[20],ch3[30];
char * szTemp[]={ch1,ch2,ch3};
cout<<szTemp[0]<<endl<<szTemp[2]<<endl<<strlen( szTemp[0])<<endl<<strlen( szTemp[2])<<endl;
这样的话是不行的,
我在VC头文件中字义几个字符数组,在构造函数中可以这样初始化,ZeroMemory(m_ch1,sizeof(m_ch1));
我想使代码简化,就定义指针数组,然后用循环来初始化头文件中的字符数组,因为如果有一百个字符数组要初始化,那不是要写一百个ZeroMemory语句么?
f22fbi 2008-04-25
  • 打赏
  • 举报
回复
用strlen求字符串长度
clhposs 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
C/C++ code#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char * szTemp[]={"一","一二","一二三"};
cout <<szTemp[0] <<endl <<szTemp[1] <<endl;//这样可以正常输出字符串:一 和 一二
cout <<strlen(szTemp[0]) <<endl <<strlen(szTemp[1]) <<endl;
return 0;
}
[/Quote]
GOOD
baihacker 2008-04-25
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char * szTemp[]={"一","一二","一二三"};
cout <<szTemp[0] <<endl <<szTemp[1] <<endl;//这样可以正常输出字符串:一 和 一二
cout <<strlen(szTemp[0]) <<endl <<strlen(szTemp[1]) <<endl;
return 0;
}


65,187

社区成员

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

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