标题:cannot convert parameter 1 from 'char *[20]' to 'char *'
只看楼主
roslin1986
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-14
结帖率:50%
已结贴  问题点数:10 回复次数:9 
cannot convert parameter 1 from 'char *[20]' to 'char *'
下面这段程序大家看看有什么问题啊,小弟搞不定了。。
#include "stdio.h"
#include "string.h"
char swap(char *p1[20],char *p2[20])
{
    char *p[20];
    strcpy(p,p1);
    strcpy(p1,p2);
    strcpy(p2,p);
}
void main()
{
    char *str1[20],*str2[20],*str3[20];
    char swap();
    printf("Input three lines:\n");
    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("Now the order is:\n");
    printf("%s\n%s\n%s\n",str1,str2,str3);
}
下面是详细的错误信息:
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(6) : error C2664: 'strcpy' : cannot convert parameter 1 from 'char *[20]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(7) : error C2664: 'strcpy' : cannot convert parameter 1 from 'char *[]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(8) : error C2664: 'strcpy' : cannot convert parameter 1 from 'char *[]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(15) : error C2664: 'gets' : cannot convert parameter 1 from 'char *[20]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(16) : error C2664: 'gets' : cannot convert parameter 1 from 'char *[20]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(17) : error C2664: 'gets' : cannot convert parameter 1 from 'char *[20]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(18) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char *[20]' to 'const char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(18) : error C2660: 'swap' : function does not take 2 parameters
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(19) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char *[20]' to 'const char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(19) : error C2660: 'swap' : function does not take 2 parameters
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(20) : error C2664: 'strcmp' : cannot convert parameter 1 from 'char *[20]' to 'const char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
e:\program files\microsoft visual studio\myprojects\1040\1040.cpp(20) : error C2660: 'swap' : function does not take 2 parameters
执行 cl.exe 时出错.
谢谢。
搜索更多相关主题的帖子: parameter convert cannot char 
2010-07-14 20:00
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
得分:0 
函数参数问题。
#include "stdio.h"
#include "string.h"
void swap(char p1[],char p2[])  //无返回值时为:void.
{                               //参数有问题。*p1[]、*p2[]是指针数组。注意指针的用法。
    char p[20];
    strcpy(p,p1);
    strcpy(p1,p2);
    strcpy(p2,p);
}
void main()
{
    char str1[20],str2[20],str3[20];
    //char swap();
    printf("Input three lines:\n");
    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("Now the order is:\n");
    printf("%s\n%s\n%s\n",str1,str2,str3);
}
多练才能生巧。呵呵。加油。

[ 本帖最后由 gyx8899 于 2010-7-14 20:50 编辑 ]
2010-07-14 20:45
roslin1986
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-14
得分:0 
回复 2楼 gyx8899
多谢啊。但是我最近在练习指针的用法,用指针这个程序该怎么改呢
2010-07-15 18:26
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
得分:0 
回复 3楼 roslin1986
呃……
这用的就是指针啊……
void swap(char p1[],char p2[])  中p1[],p2[]就是指针啊。

[ 本帖最后由 gyx8899 于 2010-7-16 19:06 编辑 ]
2010-07-16 19:04
roslin1986
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-14
得分:0 
回复 4楼 gyx8899
。char p1[],p2[];这是定义的字符数组,不是指针啊。char *p1[],*p2[];才是定义的指针数组啊。高手指点
2010-07-19 15:12
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
得分:1 
在形参中char p1[] 等价于 char *p1
2010-07-19 15:42
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
得分:6 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int swap(char *p1,char *p2)
{
    char *p = NULL;
    p = (char *) malloc(20*sizeof(char));
    if(p == NULL)
        return (-1);
    strcpy(p,p1);
    strcpy(p1,p2);
    strcpy(p2,p);

    return (0);
}

void main()
{
    int ret = 0;
    char *str1,*str2,*str3;
    str1 = (char *)malloc(20*sizeof(char));
    if(str1 == NULL)
        return -1;
    str2 = (char *)malloc(20*sizeof(char));
    if(str2 == NULL)
        return -1;
    str3 = (char *)malloc(20*sizeof(char));
    if(str3 == NULL)   
        return -1;

    printf("Input three lines:\n");
    gets(str1);
    gets(str2);
    gets(str3);

    if(strcmp(str1,str2)>0)
        ret = swap(str1,str2);
        if(ret < 0)
            return (-1);
    if(strcmp(str1,str3)>0)
        ret = swap(str1,str3);
        if(ret < 0)
            return (-1);
    if(strcmp(str2,str3)>0)
        ret = swap(str2,str3);
        if(ret < 0 )
            return (-1);

    printf("Now the order is:\n");
    printf("%s\n%s\n%s\n",str1,str2,str3);
}
处于习惯,加了一点出错处理,看上去长了一点,其实没有变复杂。
2010-07-19 20:23
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:1 
_CRTIMP char *  __cdecl strcpy(char *, const char *);
这是vc++6.0里的关于strcpy函数的库文件
传递的是char类型的指针,并不是在你的程序里传递的char类型的指针数组的首地址

愿用余生致力编程
2010-07-19 23:54
gyx8899
Rank: 2
等 级:论坛游民
帖 子:56
专家分:91
注 册:2010-2-2
得分:2 
回复 5楼 roslin1986

void swap(char p1[],char p2[])  中p1[],p2[]就是指针啊。
参数传递的是p1,p2.
p1,p2即指向数组的地址。
2010-07-21 19:20
roslin1986
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-14
得分:0 
回复 7楼 erikyo
非常感谢啊,这么编问题就解决了。也谢谢楼上其他各位啊
2010-07-21 19:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-312994-1-1.html




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

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