| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 647 人关注过本帖
标题:[求助]指针处理字符串问题
只看楼主 加入收藏
lizhijie
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-4-28
收藏
 问题点数:0 回复次数:10 
[求助]指针处理字符串问题
假如有这样一段程序:
#include<stdio.h>
char ** p;
void main()
{
char *string[2];
int i,j;

for(i=0;i<2;i++)
scanf("%s",??????);
p=string;

for(j=0;j<2;j++)
printf("%c\n",??????);//想输出每个字符串的第二个字符

}
请问 两个问号处(??????) 该怎么表示?
搜索更多相关主题的帖子: 指针 字符 
2007-05-01 10:28
神vLinux飘飘x
Rank: 2
等 级:新手上路
威 望:3
帖 子:436
专家分:0
注 册:2007-1-4
收藏
得分:0 
这两个空都要非常小心,因为题目给得非常诡异。
可以那么说,给这个题目的人居心不良

[CODE]
#include <stdio.h>

int main()
{
char **p;
char *string[2];
int i,j;
for ( i=0; i<2; i++ )
scanf("%s",(string[i]=malloc(80)));
p = string;
for ( j=0; j<2; j++ )
printf("%c\n",((i=p[j][1]),free(string[j]),i));
return 0;
}

[/CODE]
2007-05-01 10:39
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

神啊,打死我也不相信给这个题目的人能想到你这步


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-05-01 10:44
学习C中
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-10-28
收藏
得分:0 

第一个问号 直接 string[i]. 第2个,**(p+1).应该没问题吧.

2007-05-01 10:44
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 


*string[2] ,这是指针数组...

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-05-01 10:47
lizhijie
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-4-28
收藏
得分:0 

谢谢你。
但是还是不太明白为什要分配内存,而且是80?
((i=p[j][1]),free(string[j]),i) 这句话看不懂了!

2007-05-01 10:52
lizhijie
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-4-28
收藏
得分:0 
回复:(神vLinux飘飘x)这两个空都要非常小心,因为题...

谢谢你。
但是还是不太明白为什要分配内存,而且是80?
((i=p[j][1]),free(string[j]),i) 这句话看不懂了!

2007-05-01 10:54
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

这题看不懂2楼的回答的人,现在完全可以不管它,题本身就有问题


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-05-01 10:56
神vLinux飘飘x
Rank: 2
等 级:新手上路
威 望:3
帖 子:436
专家分:0
注 册:2007-1-4
收藏
得分:0 
呵呵,80是在TC下一行所能输入的最大字符数,所以我定了80,不过个人觉得可能定81比较合理,因为还要考虑'\0'字符。
但是现在很多都能输入256个字符了,所以有必要的话定成257也是可以的。

这题关键在于:char *string[2],是一个指针数组,但是并没有分配空间,必须要在使用这些指针之前为这些他们定向一个已经分配好了的空间。否则这些就是野指针,很可能会导致应用程序的崩溃。

因为给的空有限,所以只能那么写了,丑是丑了点,但是还能用是不~~~
如果是你老师出的题目,拿这个答案去吓吓他也是好的,呵呵。
2007-05-01 11:01
yu_hua
Rank: 2
等 级:论坛游民
帖 子:222
专家分:95
注 册:2006-8-10
收藏
得分:0 
以下是引用lizhijie在2007-5-1 10:28:49的发言:
假如有这样一段程序:
#include<stdio.h>
char ** p;
void main()
{
char *string[2];
int i,j;

for(i=0;i<2;i++)
scanf("%s",??????);
p=string;

for(j=0;j<2;j++)
printf("%c\n",??????);//想输出每个字符串的第二个字符

}
请问 两个问号处(??????) 该怎么表示?

红色部分是对原题的修正:
#include<stdio.h>
char ** p;
void main()
{ char str1[80],str2[80];
char *string[2]={ str1,str2 };
int i,j;

for(i=0;i<2;i++)
scanf("%s",??????);
p=string;

for(j=0;j<2;j++)
printf("%c\n",??????);//想输出每个字符串的第二个字符

}

两个问号处??????)该怎么表示?
答:第一处为 string[i]
第二处为 p[j][1]

2007-05-01 11:09
快速回复:[求助]指针处理字符串问题
数据加载中...
 
   



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

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