| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 902 人关注过本帖
标题:[求助]一道关于指针数组方面的问题
只看楼主 加入收藏
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:11 
[求助]一道关于指针数组方面的问题
大家好!
这道题是输入10个不等长的字符串排序输出.
我已查阅了本站的相关,旧贴些许收获,但尚有一些不明,尤其是我的程序开始的时候编译成功,但运行有的字符串就会找不到指针,后来我用论坛旧贴的方法也就是用到了着几个函数
malloc(sizeof(char)*20);
free();
getch();
用后实现其功能了,后来我把这几函数又给删除了,不过仍然可以实现功能,不知为何?
我是初学问题之拙绌,勿怪,望此站之仁人志士不吝赐教,并给予充分解答,并告之一些指针数组相关注意事项,感激涕泠!!

以下是我的程序:
main()
{
char *str[10];
int i;
void sort();
printf("input 10 string:\n");
for(i=0;i<10;i++)
scanf("%s",str[i]);
sort(str);
printf("the sort string:\n");
for(i=0;i<10;i++)
printf("%s\n",str[i]);
}
void sort(str)
char *str[10];
{
char *p;
int i,j,k;
for(i=0;i<9;i++)
{ k=i;
for(j=i+1;j<10;j++)
if(strcmp(str[k],str[j])>0) k=j;
p=str[i],str[i]=str[k],str[k]=p;
}
}

[此贴子已经被作者于2006-5-5 4:20:36编辑过]

搜索更多相关主题的帖子: 指针数组 函数 字符 
2006-05-05 04:18
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
有的编译器也许可以运行 ,严格来说是错的

因为你光有个指针,给你一堆字符你没处放啊

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-05 04:42
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
我的VC6。0不行,运行没错误,输入就有问题了!

用0-1统治世界!
2006-05-05 05:06
hqx
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-5
收藏
得分:0 
char *str[10];
scanf ("%s", str[i]);......
晕倒!新手最容易犯的错误之一,呵呵。
char *str[10] 定义了一个指针数组,含有十个指向整形变量的指针元素。由于是在栈空间(stack),里面的内容不会被自动初始化,所以 str[i] (0 <= i <= 9)值随机,即*str[i]指向随机地址。
如果这些地址刚好都没有被系统使用(请注意,这里我只是为描述简单起见,笼统使用了“没有被系统使用”,你如果想知道详细细节,要了解操作系统内存管理知识),那么scanf("%s", str[i])没任何问题。但是如果刚好str[i]指向某个特殊区间(如系统内存区,只读区,其他变量地址等)就会导致程序崩溃,异常推出或程序结果错误。
要改也很简单:
char *str[10];
for (i = 0; i < 10; i++)
{
str[i] = (char *) malloc (20); //实际编程中20应该用宏定义代替
}
最后程序尾记得释放内存,不然就内存泄漏了。

2006-05-05 05:40
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用hqx在2006-5-5 5:40:00的发言:
char *str[10];
scanf ("%s", str[i]);......
晕倒!新手最容易犯的错误之一,呵呵。
char *str[10] 定义了一个指针数组,含有十个指向整形变量的指针元素。由于是在栈空间(stack),里面的内容不会被自动初始化,所以 str[i] (0 <= i <= 9)值随机,即*str[i]指向随机地址。
如果这些地址刚好都没有被系统使用(请注意,这里我只是为描述简单起见,笼统使用了“没有被系统使用”,你如果想知道详细细节,要了解操作系统内存管理知识),那么scanf("%s", str[i])没任何问题。但是如果刚好str[i]指向某个特殊区间(如系统内存区,只读区,其他变量地址等)就会导致程序崩溃,异常推出或程序结果错误。

关注这位hqx学长的帖子,可能是高手牛人


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 06:22
knight110
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-4-13
收藏
得分:0 
学到了知识啊

2006-05-05 08:31
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
我不同意hqx下列说法“最后程序尾部得释放内存,不然就内存泄漏了。”因为正常结束时操作系统会收回某个“进程”当初向她“借用”的一切资源。这方面可以查阅一下任何链表代码,有哪个“临终”时用free( )的?欢迎争鸣。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 08:40
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵,我们用,不好意思,这是个习惯。
有时候还编个Free函数.
虽然程序结束后会释放,如果以后做项目的话,这个程序就可能一直运转了,这下就惨啦!

对不礼貌的女生收钱......
2006-05-05 10:07
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 

谢谢4楼的详细解释,也同样谢谢来这里的其他人
关于开辟内存我又查了几种形式不知道有和区别,希望能再次得到大家的宝贵意见

有这样一个程序段:

char *a="Word";
char *p = (char *)malloc(sizeof(char)*(strlen(a)+1));
cout<<p<<endl;char *p = (char *)malloc(sizeof(char)*(strlen(a)+1))

char *p = (char *)malloc(sizeof(char)*strlen(a))

char *p = (char *)malloc((strlen(a)+1))

char *p = (char *)malloc(strlen(a))

char *p = (char *)malloc(sizeof(a))


程序 是一门语言的艺术,讲究学练读写!
2006-05-05 14:18
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用soft_wind在2006-5-5 10:07:00的发言:
呵呵,我们用,不好意思,这是个习惯。
有时候还编个Free函数.
虽然程序结束后会释放,如果以后做项目的话,这个程序就可能一直运转了,这下就惨啦!

我又发“犟劲”了。请回忆一下,你那链表程序末尾释放内存时,是一个free()语句呢,还是用遍历呀?如果光一个free(head)是根本不管用的,对吧?只怕是一般的结构体数组吧,那才能一个free()搞定哩。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-05 14:26
快速回复:[求助]一道关于指针数组方面的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026962 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved