不理解,关于字符串与指针

HelloDan 2007-05-21 09:46:01

string str;
char *ch;
cin>>str;
ch=&str;

//另外;
int num;
cin>>num;
int array[num];


//上面那样做为什么不行啊?又要怎样才能实现那样的功能呢?
期待并感谢各样的回指导,帮助!
...全文
788 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooucj 2007-05-24
  • 打赏
  • 举报
回复
PASS
zjq520 2007-05-22
  • 打赏
  • 举报
回复
可以考虑用const来定义一个变量啊  然后在把你的num赋给const变量啊
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
有要沉,这是最后的问题了。
HelloDan 2007-05-21
  • 打赏
  • 举报
回复

while(0!=*ch)
{
*pt=*ch-'0';
pt++;
}
----------------->

while(0!=*ch)
{
*pt=*ch-'0';
pt++;
ch++; //加这句
-----------------------------------
加上那句可以了。不过用:
while(0!=*pt)
cout<<*(pt++)<<" ";
这个输出有问题,输出多了,是因为什么呢。不过可以用其他方法控制,只是我不明白。可不可以再帮我解答下?
非常感谢lj860603(跑吧,键键) ,我学到了很多东西,也发现了自己很多错误。
Poville 2007-05-21
  • 打赏
  • 举报
回复
第二个问题:
int num;
cin>>num;
int array[num];


在编译阶段,编译器就要确定静态数组的大小好用来分配空间。
而你的做法使得num的值没法在编译阶段就确定,一定要等到运行阶段才能确定。
所以这个时候写 int array[num];是不行的。
要写成 int *p = new int[num],动态分配数组。
lj860603 2007-05-21
  • 打赏
  • 举报
回复

while(0!=*ch)
{
*pt=*ch-'0';
pt++;
}
----------------->

while(0!=*ch)
{
*pt=*ch-'0';
pt++;
ch++; //加这句
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
不要沉啊。我对这方面学得不太好。
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
int *p = new int[ num ];
int *pt;
pt=p;
ch=str.c_str(); //这里是指向一组数字组成的字符串。我想将这组字符串转成数字再输出。这样还是有错啊。请问是什么原因?
while(0!=*ch)
{
*pt=*ch-'0';
pt++;
}
cout<<"The digit is:"<<endl;
pt=p;
while(0!=*pt)
cout<<*(pt++)<<" ";
cout<<endl;
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
那若我要这样有没有其他的实现方法啊?
=================
有,用new动态申请内存:

int num;

cin >> num;

int *p = new int[ num ];
----------------------------------------
谢谢你!这个方法是行的。
zycy 2007-05-21
  • 打赏
  • 举报
回复
ch=&str;------>ch=str.c_str();

int array[num];------>int* array=new int[num];
yuliyang 2007-05-21
  • 打赏
  • 举报
回复
我不太明白在char* ch这里 并没有为这个指针分配内存空间,为什么可以把一个未知长度的串赋值给他呢。
------------------------------------
这里只是让指针ch 指向一个地址而已,不是在指针ch所指地址的一段连续地址上填内容;

所以这里要区分清楚。

-------------------------------------
哦。。爱老虎油lj860603(跑吧,键键)
lj860603 2007-05-21
  • 打赏
  • 举报
回复
我不太明白在char* ch这里 并没有为这个指针分配内存空间,为什么可以把一个未知长度的串赋值给他呢。
------------------------------------
这里只是让指针ch 指向一个地址而已,不是在指针ch所指地址的一段连续地址上填内容;

所以这里要区分清楚。
yuliyang 2007-05-21
  • 打赏
  • 举报
回复
并且我把char* ch前面加上了 const才编译通过的:
#include <iostream>
#include <string>
using namespace std;
void main()
{
string str;
const char *ch;
cin>>str;
ch=str.c_str(); puts(ch);
}
lj860603 2007-05-21
  • 打赏
  • 举报
回复
那若我要这样有没有其他的实现方法啊?
=================
有,用new动态申请内存:

int num;

cin >> num;

int *p = new int[ num ];
yuliyang 2007-05-21
  • 打赏
  • 举报
回复
TO jixingzhong(瞌睡虫·星辰)
我不太明白在char* ch这里 并没有为这个指针分配内存空间,为什么可以把一个未知长度的串赋值给他呢。谢谢
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
那若我要这样有没有其他的实现方法啊?
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
>------ Build started: Project: ideaimple, Configuration: Debug Win32 ------
1>Compiling...
1>idea.cpp
1>g:\my documents\visual studio 2005\projects\ideaimple\ideaimple\idea.cpp(39) : error C2057: expected constant expression
1>g:\my documents\visual studio 2005\projects\ideaimple\ideaimple\idea.cpp(39) : error C2466: cannot allocate an array of constant size 0
1>g:\my documents\visual studio 2005\projects\ideaimple\ideaimple\idea.cpp(39) : error C2133: 'array' : unknown size
1>Build log was saved at "file://g:\My Documents\Visual Studio 2005\Projects\ideaimple\ideaimple\Debug\BuildLog.htm"
1>ideaimple - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

好像VC 2005不行啊。
lj860603 2007-05-21
  • 打赏
  • 举报
回复

//另外;
int num;
cin>>num;
int array[num];
----------------------
支持变长数组的编译器都没问题
lj860603 2007-05-21
  • 打赏
  • 举报
回复

//另外;
int num;
cin>>num;
int array[num];
----------------------
支持变长数组的编译器都没问题
HelloDan 2007-05-21
  • 打赏
  • 举报
回复
回jixingzhong(瞌睡虫·星辰):
你说的方法真的是可以,不过要定义:const char *ch;

那第二个问题又怎样解决啊?
加载更多回复(3)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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