标题:关于指针数组不能引用,求助
只看楼主
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
得分:0 
回复 9楼 给力芬2010
应该初始化没问题的···
2011-03-23 17:35
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
得分:0 
回复 10楼 forever74
我试了一下改了,没重名,可是也还是不行····
2011-03-23 17:36
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
得分:0 
你在结构中,声明的是字符数组。所以复制函数不能将字符串复给一个字符。你要声明字符串数组指针才行。像这样声明char *suit[10];这样声明后,你的那个复制函数不要用了,因为声明的是些指针数组,不能赋值的,除非分配内存。但你可以直接指向别的数据地址。删掉复制函数改成这样card[i].fact[j] = fact[a%13]。注意哦这里是个双重循环哦
2011-03-23 17:45
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
得分:0 
回复 13楼 zanzan1986
嗯嗯,我后来就改成这个
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
typedef struct
{
    char suit[10];
    char face[10];
}change;
change card[52];
char *face[]={"1","2","3","4","5","6","7","8","9","10","jack","queen","king"};
char *suit[]={"spade","hearts","clubs","diamonds"};

void start(change wcard[],char *wface[],char *wsuit[])//形参和实参尽量不要重名,不然的话有些编译器容易 报错
{
    int a,b,c;
    for(a=0;a<52;a++)
   {  
    int a;
    strcpy(wcard[a].face,wface[a%13]);
    strcpy(wcard[a].suit,wsuit[a/13]);
    }
}


int main()
{
    start(card,face,suit);
    return 0;
}



它没有报错或警告了,但是它在弹出控制台不久后,却说程序已停止工作什么的,是不是有什么地方越界什么之类的,还有我想问一下,char *suit[]这样的定义是不是可以看做是一个没有定义列大小的二维数组
2011-03-23 18:01
xxbeifeng
Rank: 1
等 级:新手上路
帖 子:9
专家分:9
注 册:2011-3-22
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

typedef struct
{
    char suit[10];
    char face[10];
}change;

change card[52]; //全局变量

char *face[]={"1","2","3","4","5","6","7","8","9","10","jack","queen","king"};
char *suit[]={"spade","hearts","clubs","diamonds"};

void start(change card[],char *face[],char *suit[])
{
    int a;
    for(a=0;a<52;a++)
    {
        strcpy(card[a].face,face[a%13]); //原来的face[]是一个字符数组 现在的face为字符串数组指针 strcpy需要前后都为字符串
        strcpy(card[a].suit,suit[a/13]); //求除
        printf("%s\n",card[a].face);
        printf("%s\n",card[a].suit);
    }
}

int main()
{
    start(card,face,suit);
    return 0;
}
2011-03-23 19:25
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
得分:0 
回复 14楼 q1826050194
大爷哦,我说的是结构体里面的。
struct card
{
    char *suit[10];
    char *dult[10];
};
懂了不
不过我想到了一种新的方法,比你这要少好多数组变量。今晚十二点再发给你
2011-03-23 20:08
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
得分:0 
回复 16楼 zanzan1986
嗯嗯 好的,太感谢了,不过12点之后学校好像已经断网了,只能明天才看到
2011-03-23 20:55
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
得分:8 
#define MAX 52
#define ID 13
bool flag[MAX];   //牌的标记,真为没发出去,假为发出去了
//这里要用for循环把flag数组全部初始为真再用哦,不然会出错
void OutCard(int a[], int b[])    //发牌函数
{
    //a 来装牌的号码   b是装牌的花色
    int x;
    int count;
    for(int i = 0; i < 10; i++)
    {
        do
       {
          x = rand()%51 + 1;   //随机发牌1-52
        }while(!flag[x]);      //为真就说明没发出去退出,为假就说明发出去了重新再取牌
        flag[x] = false;       //标记牌已发出去了
        a[i] = x % ID;         //算出牌号  5%13 得出 5   32 % 13 得出  6
        count = 0;             //花色变量
        while(x > ID&&count++)    //这里的count值  0 是黑 1 是红 2 是梅 3 是方
        {
           x -= ID;
         }
        b[i] = count;          //取得花色
     }
}
2011-03-24 01:46
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
得分:8 
以下是引用q1826050194在2011-3-23 18:01:59的发言:

嗯嗯,我后来就改成这个
...
void start(change wcard[],char *wface[],char *wsuit[])//形参和实参尽量不要重名,不然的话有些编译器容易 报错
{
    int a,b,c;
    for(a=0;a<52;a++)
   {  
    int a;    /* 你在循环体里面又定义了一个未初始化的变量a, 你说能不内存越界吗? */
    strcpy(wcard[a].face,wface[a%13]);
    strcpy(wcard[a].suit,wsuit[a/13]);
    }
}
...

它没有报错或警告了,但是它在弹出控制台不久后,却说程序已停止工作什么的,是不是有什么地方越界什么之类的,还有我想问一下,char *suit[]这样的定义是不是可以看做是一个没有定义列大小的二维数组

最开始的警告就是因为你start函数的后两个形参把char**写成char*的缘故
你现在改得这个没问题了。。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2011-03-24 08:28
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
得分:0 
回复 18楼 zanzan1986
噢 ,太感谢了···
2011-03-24 08:43



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




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

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