CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

C语言[改错---字符指针数组问题]

楼主fruitsbasket()2006-06-04 13:48:14 在 C/C++ / C语言 提问

#include"stdio.h"    
  #include"string.h"    
  char   swap(char   *p1,char   *p2)    
  {    
  char   *temp[20];    
  strcpy(temp,p1);    
  strcpy(p1,p2);    
  strcpy(p2,temp);    
  }    
   
  main(){    
  char   *str1[20],*str2[20],*str3[20];   /*这里没错吧?定义了一个字符指针数组*/  
  gets(str1);    
  gets(str2);    
  gets(str3);    
  if(strcmp(str1,str2)>0)/*这里怎么比的里?这里的str1是代表字符指针数组的首地址即&str[0]                /*吗?*/     
  swap(str1,str2);    
   
  if(strcmp(str1,str3)>0)    
  swap(str1,str3);    
   
  if(strcmp(str2,str3)>0)    
  swap(str2,str3);    
   
  printf("%s\n%s\n%s\n",str1,str2,str3);    
   
  }  
  问题点数:100、回复次数:8Top

1 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 13:58:10 得分 0

#include"stdio.h"    
  #include"string.h"    
   
  void   swap(char   *p1,char   *p2)    
  {    
  char   temp[20];    
  strcpy(temp,p1);    
  strcpy(p1,p2);    
  strcpy(p2,temp);  
  }    
   
  void   main(){    
  char   str1[20],str2[20],str3[20];    
  gets(str1);    
  gets(str2);    
  gets(str3);    
  if(strcmp(str1,str2)>0)  
  swap(str1,str2);    
   
  if(strcmp(str1,str3)>0)    
  swap(str1,str3);    
   
  if(strcmp(str2,str3)>0)    
  swap(str2,str3);    
   
  printf("%s\n%s\n%s\n",str1,str2,str3);    
   
  }  
   
  Top

2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 13:58:38 得分 0

char   str1[20],str2[20],str3[20];     //接受一串字符,所以这样就可以了!!Top

3 楼fruitsbasket()回复于 2006-06-04 14:01:26 得分 0

可程序运行的没问题  
  我试过了~  
  郁闷ingTop

4 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 14:02:37 得分 0

是有问题,还是没有问题??  
    楼主的程序功能是什么??  
    难道不是比较字符串的大小然后按序输出么??Top

5 楼duduhaha(三人行必有我师)回复于 2006-06-04 14:16:18 得分 0

楼主,程序运行的没问题不说明程序没错误,呵呵.  
   
  一个严格的编译器会给你的程序很多错误提示的.  
   
   
   
  char   *str1[20];//如此定义表示在栈中申请了80字节的空间(32位机上).  
  gets(str1);//str1是个二维指针,但你用这个函数发生了二维指针向一维指针的转换.结合前面,你能以str1为地址放进20个字节的字符串是很正常的.  
   
  你应该像chenhu_doc的那么改.Top

6 楼goodluckyxl(被人遗忘的狗)回复于 2006-06-04 14:20:26 得分 0

char   *str1[20],*str2[20],*str3[20];   /*这里没错吧?定义了一个字符指针数组*/  
  语意   非指针数组本意应该都是去掉*声明为数组  
  我这边没有编译器   我看你的程序现在的用法  
  其实是将指针数组str1   ...等首地址传入char*强制转化为char*来运行  
  恰好你定义的指针数组每个都有20*4个空间>>你所期望的20字符的空间  
  所以运行表现可能是正确的。  
  我建议你这样改一下   char*   str[2]那结果如果输入8个以上字符应该出错了  
  应该是这样吧   你体会一下Top

7 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-04 14:28:02 得分 0

#include   <stdio.h>  
  #include   <string.h>  
  #include"conio.h"  
  void   swap(char   *p1,char   *p2)  
  {  
            char   temp[20];  
            strcpy(temp,p1);  
            strcpy(p1,p2);  
            strcpy(p2,temp);  
  }  
  int   main()  
  {  
          char   str1[20],str2[20],str3[20];  
          gets(str1);  
          gets(str2);  
          gets(str3);  
          if(strcmp(str1,str2)>0)  
                  swap(str1,str2);  
          if(strcmp(str1,str3)>0)  
                  swap(str1,str3);  
          if(strcmp(str2,str3)>0)  
                  swap(str2,str3);  
          printf("%s\n%s\n%s\n",str1,str2,str3);  
          getch();  
          return   0;  
  }Top

8 楼MagicCarmack(MagiC++)回复于 2006-06-04 14:53:07 得分 0

问题解决了没?Top

相关问题

关键词

得分解答快速导航

  • 帖主:fruitsbasket

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo