鱼C论坛

 找回密码
 立即注册
查看: 1517|回复: 7

[已解决]我看不太懂我到底那里错了(进来看图一目了然)

[复制链接]
发表于 2020-2-20 18:25:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

我tm被折腾了一个小时,也都去查过了,看不明白,重启也重启过了


asd.png

最佳答案
2020-2-20 19:12:14
本帖最后由 jackz007 于 2020-2-20 19:25 编辑

        player 是按指针数组的数据类型定义的,只能存放 3 个字符型指针,并没有存放字符串的空间,出错的原因是,s_scanf("%s" , player[1]) ; 语句把键盘输入的字符保存到了 player[1] 所指向的地址空间,而 player[1] 并没有经过赋值,所以,这个地址绝对是无效的,出错是跑不脱的。

        这些语句:
        . . . . . .
        char * player[3]          ;
        . . . . . .
        s_scanf("%s" , player[1]) ;
        . . . . . .        
       改成下面这样试试
        . . . . . .        
        char player[3][256]             ;
        . . . . . .
        s_scanf("%s" , player[1] , 256) ;
        . . . . . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-20 18:26:19 | 显示全部楼层
发完整代码,不要只发个图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 18:38:00 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MAX 18

int xipai(int);
void fapai(int);
int type_j(int);

int main()
{
    char* player[3];
    unsigned pai = 54;


    int i, p, j;
    for (i = 0; i < 3; i++)
    {
        printf("请输入%d号玩家的ID:", i + 1);
        scanf_s("%s",player[1]);
    }

    for (i = 0; i < 3; i++)
    {
        printf("%s", player[i]);
        for (j = 0; j < MAX; j++)
        {
            p = xipai(pai);
            putchar('\b');
            fapai(p);
        }
        printf("\n");
    }
}

int xipai(int pai)
{
    int p;
    time_t t;
    srand((unsigned)time(&t));
    p = rand() % pai - 1;
    p++;
    return p;
}
//判断,可跳过
void fapai(int p)
{
    char* type = NULL;
    if (p <= 10)             type = "方";
    else if (p <= 20)
    {
        type = "梅";
        p = p % 10;
    }
    else if (p <= 30)
    {
        type = "红";
        p = p % 20;
    }
    else if (p <= 40)
    {
        type = "黑";
        p = p % 30;
    }
    else if (p <= 43)
    {
        type = "方";
        type_j(p);
    }
    else if (p <= 46)
    {
        type = "梅";
        type_j(p);
    }
    else if (p <= 49)
    {
        type = "红";
        type_j(p);
    }
    else if (p <= 52)
    {
        type = "黑";
        type_j(p);
    }
    else if (p == 53)
    {
        printf("小王");
        return;
    }
    else if (p == 54)
    {
        printf("大王");
        return;
    }

    printf("%s", type);
    printf("%c", p + 48);

}

int type_j(int p)
{
    p = p % 40;
    switch (p % 3)
    {
    case 1:return 81 - 48;
    case 2:return 75 - 48;
    case 0:return 74 - 48;
    }
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 18:39:46 | 显示全部楼层
我真的就是见了鬼,我慢慢写得跟规则一样,却给我报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 19:12:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-20 19:25 编辑

        player 是按指针数组的数据类型定义的,只能存放 3 个字符型指针,并没有存放字符串的空间,出错的原因是,s_scanf("%s" , player[1]) ; 语句把键盘输入的字符保存到了 player[1] 所指向的地址空间,而 player[1] 并没有经过赋值,所以,这个地址绝对是无效的,出错是跑不脱的。

        这些语句:
        . . . . . .
        char * player[3]          ;
        . . . . . .
        s_scanf("%s" , player[1]) ;
        . . . . . .        
       改成下面这样试试
        . . . . . .        
        char player[3][256]             ;
        . . . . . .
        s_scanf("%s" , player[1] , 256) ;
        . . . . . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-20 19:24:45 | 显示全部楼层
jackz007 发表于 2020-2-20 19:12
这些语句:

       改成下面这样试试

我获得的不应该是一个地址么,为什么我还需要规定这个后面的元素个数,求解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 19:36:30 | 显示全部楼层
BIYU 发表于 2020-2-20 19:24
我获得的不应该是一个地址么,为什么我还需要规定这个后面的元素个数,求解答


        变量 player 申请的空间必须能够保存键盘输入数据。
        char * player[3] ;
        定义 player 为有 3 个元素的一维指针数组,对于 32 位的程序而言,每个指针的长度占用 4 个字节,那么,player 申请到的空间是 4 * 3 = 12 个字节;
        char player[3][256] ;
        定义 player 为 256 x 3 的二维字符数组,每个字符占用 1 个字节,那么,player 申请到的空间是 256 * 3 = 768 字节。

        由此可见,两种定义申请到的 player 空间大小完全不同,性质和用途也完全不同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 19:38:37 | 显示全部楼层
jackz007 发表于 2020-2-20 19:36
变量 player 申请的空间必须能够保存键盘输入数据。

        定义 player 为有 3 个元素的 ...

好的,明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表