小白第一次用洛谷,Dev可过,为什么全RE

P5705 【深基2.例7】数字反转

Danmoits @ 2021-01-16 11:06:01

#include <stdio.h>
int Strlen(char str[]);
void StrReverse(char str[]);
char str[5];
void main(){
    fgets(str,5,stdin);
    StrReverse(str);
    int length=Strlen(str);
    str[length]='\0';
    //去除最后的换行符 
    printf("%s",str);       
} 
int Strlen(char str[]){
    int i=0;
    while(str[i]!='\n')
        i++;
    return i;
}

void StrReverse(char str[]){
    int length=Strlen(str);
    char *p=str;
    char *q=str+length-1;
    char t;
    int i; 
    for(i=0;i<length/2;i++){
        t=*p;
        *p=*q;
        *q=t;
        p++;
        q--;
    }
}

用C语言


by Yukinoshita_Yukino @ 2021-01-16 11:07:24

char str[5];

数组爆了


by _caiji_ @ 2021-01-16 11:08:01

str只开了5位,放不下最后的\0,开大一点吧


by Oildum @ 2021-01-16 11:45:10

改成char str[100000](雾)


by Danmoits @ 2021-01-16 11:48:34

#include <stdio.h>
int Strlen(char str[]);
void StrReverse(char str[]);

char str[1024];
//扩大了数组容量
void main(){
    fgets(str,1024,stdin);
    StrReverse(str);
    int length=Strlen(str);
    str[length]='\0';
    //去除最后的换行符 
    printf("%s",str);       
} 
int Strlen(char str[]){
    int i=0;
    while(str[i]!='\0')
    //对回车稍作修改
        i++;
    return i;
}

void StrReverse(char str[]){
    int length=Strlen(str);
    char *p=str;
    char *q=str+length-1;
    char t;
    int i; 
    for(i=0;i<length/2;i++){
        t=*p;
        *p=*q;
        *q=t;
        p++;
        q--;
    }
}

修改成了这样子 然后IDE界面是这样的,有结果但是显示“运行时错误”


by 传奇666666 @ 2021-01-16 11:56:51

你main函数没有返回0,所以自然会判断你re了。


by OraclePi @ 2021-01-16 12:14:46

add:

return 0;


by HYdroKomide @ 2021-01-16 12:16:14

最好还是写int main或者signed main


by PhantomEcho @ 2021-01-16 21:36:52

洛谷不支持void main这样的写法,建议改成int main,后面加上return 0


|