我要被这道题逼疯了!为什么这个字符串数组有的时候不输出呢??

图片说明

这是题目要求,然后我写的代码是这样的:

#include
#include

int main() {
int number=0,sign=0;
char gifts[1000]={},friends[20]={};
char str[50]={};
int length[50]={};
int n=0,i=0;

scanf("%d",&number);

while(n<number) {
    scanf("%d%s",&sign,str);

    if(sign==1) {
        strcpy(gifts+length[i],str);
        i++;
        length[i]=strlen(str)+1;
        memset(str,0,sizeof(str));
    }

    if(sign==2) {
        strcpy(friends,str);
        printf("%s %s\n",friends,gifts+length[i-1]);
        memset(str,0,sizeof(str));

        memset(gifts+length[i-1],0,sizeof(gifts+length[i-1]));
        i--;
    }
    n++;


}

}

但是检测的时候输出的是这样的:
图片说明

这是输入要求:
图片说明

为什么啊!!我想这个问题好几天了....哭泣.....为什么有些不输出但是后面的搭配居然是对的??
而且我的str都给了50了,为什么onemillioncheck还显示不全呢??

请大神解答....暴风哭泣.....在线等!!

你的gifts和length用的很乱,并且一开始用strcpy连字符也有问题,你可以看一下监视窗口,字符排错了。
有些混乱,做了一些修改

 #include<stdio.h>
#include<string.h>
int main() {
    int number = 0, sign = 0;
    char gifts[1000] = {}, friends[20] = {};
    char str[50] = {};
    int length[50] = {};
    int n = 0, i = 0;
    scanf("%d", &number);
    while (n < number) {
        scanf("%d%s", &sign, str);
        if (sign == 1) {
            strcat(gifts, str);         //  把字符串全部连到gifts里
            i++;
            length[i] = strlen(str) + 1;
            memset(str, 0, sizeof(str));
        }
        if (sign == 2) {
            strcpy(friends, str);
            printf("%s %s\n", friends, gifts +strlen(gifts) - length[i]+1);         //输出,除去最后length个长度的首地址
            memset(gifts + strlen(gifts)-length[i]+1, 0, sizeof(gifts + length[i - 1]));  //输出部分置空
            i--;
        }
        n++;
    }
    return 0;
}

题目说是栈,那么用栈来操作就 比较简单了,下面是一个简单的字符栈

 #include<stdio.h>
#include<string.h>
int main() {
    int number = 0, sign = 0;
    char gifts[100][100] = {};
    int top = -1;           //栈顶指针
    char str[50] ;
    int n = 0;
    scanf("%d", &number);
    while (n < number) {
        scanf("%d%s", &sign, str);
        if (sign == 1) 
            strcpy(gifts[++top], str);              //入栈
        if (sign == 2) 
            printf("%s %s\n", str, gifts[top--]);   //输出栈顶元素,出栈
        n++;
    }
    return 0;
}