超简单的问题,送分!!

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;

}
...全文
439 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
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" };
吃狼的豆腐 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;

}
加载更多回复(5)

65,187

社区成员

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

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