判断回文数组什么导致运行时错误

请各位看看这串代码哪里有问题导致运行时错误

#include
#include
int main(){
    char a[80];
    char b[80];
    gets(a);
    int i=0,j;
    while(a[i]!='\0'){
        i++;
    }
    for(i=i-1,j=0;i>=0;j++,i--){/*将a的字符串倒序赋给b*/
        b[j]=a[i];
    }    
    if(strcmp(a,b)==0){
        printf("%s\n",a);
        printf("Yes");
        
    }else{
        printf("%s\n",a);
        printf("No");
    }
    return 0;}

img

i=i-1
应该是
i=i-2

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7495634
  • 这篇博客也不错, 你可以看下关于在写代码时如何使用绝对路径与相对路径及其简单介绍
  • 除此之外, 这篇博客: 常用数据结构与经典算法 简单讲解与示例代码中的 魔术师发牌问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 问题描述

    魔术师发牌问题的简介:一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下。
    说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;
    魔术师将黑桃A放到桌上,继续数手里的余牌,
    第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。
    第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,全部都准确无误。

    示例代码(C语言)
    魔术师发牌 Visual Studio 2019

    /**
     * 数据结构 C语言 魔术师发牌
     * @FileName									MagicCard.c
     * @author										W.Lionel.Esaka
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    #define Status int;
    #define CORRECT 1;
    #define ERROR 0;
    #define OVERFLOW -1;
    
    #define CardNumber 13;
    
    typedef int ElemType;
    /*定义循环链表结点*/
    typedef struct CLinkedList {
    	ElemType data;
    	struct CLinkedList* Next;
    }Node;
    
    /*初始化链表*/
    void ListInit(Node** p, int number)
    {						 
    	int item = 0;
    	Node* temp;
    	Node* target;
    
    	for (int i = 1; i <= number; i++)
    	{
    		if (*p == NULL)
    		{
    			*p = (Node*)malloc(sizeof(Node));
    			if (!*p)exit(0);
    			(*p)->data = item;
    			(*p)->Next = *p;
    		}
    		else		
    		{
    			for (target = *p; target->Next != *p; target = target->Next);
    
    			temp = (Node*)malloc(sizeof(Node));
    			if (!temp)exit(0);
    			temp->data = item;
    			temp->Next = *p;
    			target->Next = temp;
    		}
    	}
    }
    
    /*设定牌堆顺序*/
    void CardOrder(Node** card)
    {
    	int PokerSize = 2;
    	Node* temp;
    	temp = (*card);
    	(*card)->data = 1;
    
    	while (1)
    	{
    		for (int j = 0; j < PokerSize; j++)
    		{
    			temp = temp->Next;
    			if (temp->data != 0)
    			{
    				temp->Next;
    				j--;
    			}
    		}
    
    		if (temp->data == 0)
    		{
    			temp->data = PokerSize;
    			PokerSize++;
    
    			if (PokerSize == 14)
    				break;
    		}
    	}
    }
    
    /*遍历链表*/
    void CardDisplay(Node* list)
    {
    	Node* target;
    	target = list;
    	do {
    		printf("黑桃%d  ", target->data);
    		target = target->Next;
    	} while (target != list);
    	printf("\n");
    }
    
    /*销毁链表*/
    void DestoryList(Node** list)
    {
    	Node* ptr = (*list);
    	Node* buff[13];
    	int i = 0;
    
    	while (i < 13)
    	{
    		buff[i++] = ptr;
    		ptr = ptr->Next;
    	}
    
    	for (i = 0; i < 13; i++)
    	{
    		free(buff[i]);
    	}
    
    	*list = 0;
    	printf("表已销毁\n");
    }
    
    /*入口*/
    int main(void)
    {
    	Node* list = NULL;
    
    	ListInit(&list, 13);
    	CardOrder(&list);
    	CardDisplay(list);
    	DestoryList(&list);
    }
    
  • 您还可以看一下 吴刚老师的【吴刚大讲堂】电商品牌文案设计方法课程中的 字体选择案例应用小节, 巩固相关知识点