首页 > 解决方案 > 为什么这个 C 程序在字符串的最后加上“v”?

问题描述

在检查字符串是否为回文时,当我打印反向字符串'v'时会自动附加到这里,这是为什么?而且,如果我删除了代码的回文检查部分,那么不会附加“v”,这是为什么呢?(可能是未定义的行为,但如何?代码似乎没问题)。我试图找出这个程序如何是未定义的行为,但我不知道出了什么问题。而且这个程序应该什么都不打印,但它会打印一些字符串,我不知道为什么会这样。

#include<stdio.h>
int main(){
    int i,j;
    char string[100],reverse[100];

    printf("enter a string:\n");

    fflush(stdin);
    scanf("%s",string);

    for(j=0;string[j]!='\0';j++);

    for(i=0;i<=j;i++){ 
        /* I know if here is <= (it is intetional)
        it will go upto one more than the string.
        If we suppose so then '\0' should be swapped in front of 
        the string so no sting should have been printed but it prints string. */ 
        

        printf("%d\n",i);
        reverse[i]=string[j-1-i];
    }

    printf("%s ,%d, %d",reverse,j,i);

    int is_palindrome=1;

    for( i=0;i<j;i++){
        if(string[i]!=reverse[i]){
            is_palindrome=0;
            break;
        }
        
    }

    if(is_palindrome){
        printf("\nis palindrome");
    }
    else{
        printf("\nis not palindrome");
    }
   
}

标签: cstringundefined-behavior

解决方案


推荐阅读