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




