1345 神秘的日期(一个令人十分不理解的题目)

博主在学习结构体时遇到问题:定义不同结构体成员数的数组,导致在OJ系统中输出结果各异。代码中使用字符串处理日期,为何数组大小影响结果?寻求解答。

最近在学结构体,遇到这么一道题目,定义结构体数组时,不同的结构体成员数目会导致oj系统里输出不同的结果(其实按照题目的限制,只需要12就足够了,但是,如果定义s[12],会输出runtime error,s[100]时是wrong answer,而s[1000]就通过了.....)

实在不知道是哪里有问题,希望各位大佬能够帮忙看看我的代码里是否有什么问题,不甚感谢!

题目描述

考古队在一个神秘的遗迹中发现了一块石碑,经过清洗和复原他们发现上面刻有许多字符,如下:
	10000101/18751212/14570326/18880808/
由于石碑上的内容太多这里只列出了一部分。
这些神秘的字符是什么?经过一番激烈的讨论,大家一致认为这是一串神秘的日期,解开这串日期里蕴藏的秘密也许就能够预知未来。
但这个时候有个难题摆在了大家面前。这串日期是如此之长,又杂乱无章,不利于分析。这个时候他们想到了作为编程高手的你,想让你帮他们把这些日期整理下,以便于分析。

输入要求

输入一行由斜杠分隔的数字,长度不超过100,斜杠将这串数字分割成了若干部分,每个部分长度都为8。

输出要求

提取输入串中的每个日期,按时间顺序排序并输出。
输出有若干行(字符串中有几个日期就输出几行),每行一个日期,日期格式如下:
	1987-08-01

输入样例

10000101/18751212/14570326/18880808/20120123/20120216

输出样例

1000-01-01
1457-03-26
1875-12-12
1888-08-08
2012-01-23
2012-02-16

以下是我的代码,用的都是字符串

#include<stdio.h>
#include<string.h>
typedef struct date//定义结构体
{
    char y[5];
    char m[3];
    char a[3];
    char z[13];
}da;
int main()
{
    da d[1000];//测了好几组数据,发现d这个数组成员数不同的时候,输出的结果也不一样
    da t;
    char s[110];
    int m,len,j,i;
    char ch;
    int n=0,p=0;
    gets(s);
    len=strlen(s);
    d[p].y[4]='\0';
    d[p].m[2]='\0';
    d[p].a[2]='\0';
    for(i=0;i<=len;i++)//逐个提取字符,放到各个日期里
    {
        if(n>=0&&n<=3)
        {
            d[p].y[n]=s[i];
        }
        if(n>=4&&n<=5)
        {
            d[p].m[n-4]=s[i];
        }
        if(n>=6&&n<=7)
        {
            d[p].a[n-6]=s[i];
        }
        if(n<8)
        {n++;continue;}
        if(n==8)
        {
            strcpy(d[p].z,d[p].y);
            strcat(d[p].z,d[p].m);
            strcat(d[p].z,d[p].a);
            p++;n=0;
            if(p<len/9)
            {
                 d[p].y[4]='\0';
                 d[p].m[2]='\0';
                 d[p].a[2]='\0';
            }

        }
    }
    len=p;
    for(i=0;i<len-1;i++)//排序
    {
        m=i;
        for(j=i;j<len;j++)
        {
            if(strcmp(d[j].z,d[m].z)<0)
                m=j;
        }
        t=d[m];d[m]=d[i];d[i]=t;
    }
    for(i=0;i<len;i++)
    {
        printf("%s-%s-%s\n",d[i].y,d[i].m,d[i].a);
    }
    return 0;}

下面是我试的几组数据,都是最后一个输入的日期会出现毛病

 

 

 或许用int型解决就不会有这种情况了,但是还是想搞明白为什么看似没有影响(对我来说)的结构体数组定义会导致这样的一个结果。谢谢大佬们帮忙!!!

<think>嗯,用户问的是关于X-XSS-Protection响应头缺失的问题如何处理。首先,我需要回忆一下X-XSS-Protection的作用。这个响应头是用来启用浏览器内置的XSS过滤机制的,主要针对旧版本的浏览器,比如IE和旧版的Chrome。现在很多现代浏览器可能已经不再支持这个头了,但为了兼容性,可能还是需要设置。 接下来,用户想知道如何处理这个问题。我应该先解释这个响应头的重要性,然后给出具体的解决方法。比如,在常见的服务器如Apache、Nginx、IIS上如何配置。同时,要提醒用户这个头已经被现代标准取代,建议他们考虑使用Content-Security-Policy(CSP)来提供更强的防护。 需要确保用户明白虽然设置这个头有帮助,但更安全的方式是采用CSP。另外,可能还要提到其他安全措施,比如输入验证和输出编码,综合防御XSS攻击。还要注意用中文,结构清晰,分步骤说明,避免使用Markdown,用自然的口语化表达。</think>关于X-XSS-Protection响应头缺失的问题,以下是分步解决方案(含LaTeX公式演示): 1. **理解问题本质** X-XSS-Protection是浏览器用于检测反射型XSS攻击的机制,响应头缺失时: $$ \text{安全风险} = \text{反射型XSS漏洞利用概率} \times \text{潜在危害} $$ 2. **服务器配置方案** 根据不同服务器类型设置- **Apache** ```apache Header set X-XSS-Protection "1; mode=block" ``` - **Nginx** ```nginx add_header X-XSS-Protection "1; mode=block"; ``` - **IIS** 通过web.config添加: ```xml <system.webServer> <httpProtocol> <customHeaders> <add name="X-XSS-Protection" value="1; mode=block"/> </customHeaders> </httpProtocol> </system.webServer> ``` 3. **现代浏览器兼容性** 注意该头在Chrome 78+和Edge 79+已弃用,建议补充设置: $$ \text{Content-Security-Policy} \supset \text{X-XSS-Protection} $$ 4. **配套安全措施** 建议组合使用- 输入验证:$ \forall \text{输入} \in [\text{允许字符集}] $ - 输出编码:$ \text{输出} = \text{HTML实体编码}(用户数据) $ - CSP策略:`Content-Security-Policy: script-src 'self'` 5. **验证方法** 使用curl命令测试: ```bash curl -I https://yourdomain.com | grep -i x-xss-protection ``` 预期返回:`X-XSS-Protection: 1; mode=block` 注:现代Web应用建议优先采用Content-Security-Policy(CSP)实现更精细的脚本控制,该响应头可作为旧版浏览器兼容的补充措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值