超简单的问题,送分!!

mnb_cn123 2006-06-15 03:49:57
以下程序运行时没有问题,但输入时出现“该内存不能Written的”错误提示,不知错在哪里,请大家赐教!,谢谢!!!

# include <iostream.h>
# include <stdio.h>
main()
{
char * c_point[10];//={"didr","pd","dvi","eigvhjj","qdevm","ie[w","aaa","vneez","eiqpx","l,xvr"};
for(int i=0;i<10;i++)
//scanf("%s",c_point+i);
cin>>c_point[i];
for(int j=0;j<10;j++)
cout<<*(c_point+j)<<endl;
return 0;

}
...全文
390 25 点赞 打赏 收藏 举报
写回复
25 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xxxl 2006-06-17
内存没有分配的缘故


char * c_point[10]={};
相当于
const char * c_point[10]={}; //表示指向常量的指针数组,常量自然不可写。
  • 打赏
  • 举报
回复
BEN1978 2006-06-17
为什么不用std,c++编译器无条件支持的
  • 打赏
  • 举报
回复
BEN1978 2006-06-17
2.不能正常工作
char *cPoint[1] = { "test" };
*cPoint[0] = '1';
它是程序启动时分配的一块"静态内存"(不知道怎么样正确描述), 它的值是不可改变的..所以当你向这块内存输入东东的时候.会出错

正确,隐藏了const, const char *cPoint[1] = { "test" };
  • 打赏
  • 举报
回复
cattlenzq 2006-06-17
直接赋值是常量。。。。。。。。。去搜下吧,那类帖子超多

动态申请,或者不要赋值先

推荐用string,不用考虑溢出问题
  • 打赏
  • 举报
回复
freeldm 2006-06-16
*c_point = "fss",这个错,常量不可以=值,*c_point指向的是常量。。
  • 打赏
  • 举报
回复
hjf80531 2006-06-16
new_o_new() ( )
1.这在这种条件下..
char *cPoint[1] = { "test" };
*cPoint[0] = '1';

p[0]这是地址,*p[0]这是地址解析,解析后自然是常量了
不懂..

2.
char *cPoint[1] = NULL;
cPoint[0] = new char[10];
*p[0]这是不是地址解析???如果是解析后不是常量.能改动的..

有点不明白..为什么说 "*p[0]这是地址解析,解析后自然是常量了"
请教

  • 打赏
  • 举报
回复
hjf80531 2006-06-16
new_o_new() ( )
p[0]这是地址,*p[0]这是地址解析,解析后自然是常量了
  • 打赏
  • 举报
回复
new_o_new 2006-06-15
对这个问题的看发!
1.正常工作
char cPoint[] = {"test"};
cPoint[0] = '1';


2.不能正常工作
char *cPoint[1] = { "test" };
*cPoint[0] = '1';
****************************************************

char *cPoint[1] = { "test" };//指针数组,每一个元素都是指针
*cPoint[0] = '1';//*cPoint[0]这是一个常量,给常量赋值错误

例如:
p[0]这是地址,*p[0]这是地址解析,解析后自然是常量了
  • 打赏
  • 举报
回复
heihei2004 2006-06-15
没有分配内存?
  • 打赏
  • 举报
回复
new_o_new 2006-06-15
yiyo2025(HenryKong)
我觉得他的好~
  • 打赏
  • 举报
回复
mnb_cn123 2006-06-15
谢谢大家!!!
  • 打赏
  • 举报
回复
ywhbn 2006-06-15
楼上正解

其实就相当于
char *s = "123";
s = 'a'; // s是const的,不允许赋值
  • 打赏
  • 举报
回复
hjf80531 2006-06-15
LZ结贴..拿分..
  • 打赏
  • 举报
回复
hjf80531 2006-06-15
char * c_point[10]={"didr","pd","dvi","eigvhjj","qdevm","iew","aaa","vneez","eiqpx","l,xvr"};
不是在栈上分配的..c_point指针数组指向的内存不可改
  • 打赏
  • 举报
回复
yiyo2025 2006-06-15
lz的意图应该是这样吧:
# include <iostream.h>
# include <stdio.h>

int main()
{
char *c_point[10];

for(int i=0; i<10; i++)
{
c_point[i] = new char[10];
cin >> c_point[i];
}

for(int j=0;j<10;j++)
cout<<*(c_point+j)<<endl;

return 0;
}
  • 打赏
  • 举报
回复
hjf80531 2006-06-15
我只是说明一个问题..
1.正常工作
char cPoint[] = {"test"};
cPoint[0] = '1';
它是程序在栈上分配了一块内存..
是可以改动它的值的..

2.不能正常工作
char *cPoint[1] = { "test" };
*cPoint[0] = '1';
它是程序启动时分配的一块"静态内存"(不知道怎么样正确描述), 它的值是不可改变的..所以当你向这块内存输入东东的时候.会出错
  • 打赏
  • 举报
回复
mnb_cn123 2006-06-15
晕啊,我这个数组里的每个成员都是字符串,如:
如:
char * c_point[10]={"didr","pd","dvi","eigvhjj","qdevm","iew","aaa","vneez","eiqpx","l,xvr"};
而你的只是一个字符串,不一样的啊,
  • 打赏
  • 举报
回复
hjf80531 2006-06-15
1.正常工作
char cPoint[] = {"test"};
cPoint[0] = '1';


2.不能正常工作
char *cPoint[1] = { "test" };
*cPoint[0] = '1';


为啥
  • 打赏
  • 举报
回复
mnb_cn123 2006-06-15
sarh2os() ,能不能不用string类,而用我的方式???大家请看清楚问题我要用“键盘输入的方式”对该数组进行赋值。
  • 打赏
  • 举报
回复
hjf80531 2006-06-15
# include <iostream.h>
# include <stdio.h>
main()
{
这里..你把初始化注释掉了..这样10个指针都没有分配内存
char * c_point[10];//={"didr","pd","dvi","eigvhjj","qdevm","ie[w","aaa","vneez","eiqpx","l,xvr"};
for(int i=0;i<10;i++)
//scanf("%s",c_point+i);
cin>>c_point[i];
for(int j=0;j<10;j++)
cout<<*(c_point+j)<<endl;
return 0;

}
  • 打赏
  • 举报
回复
加载更多回复
发帖
C++ 语言
创建于2007-09-28

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2006-06-15 03:49
社区公告
暂无公告