2

だから私はscanfの部分をコメントアウトしました(そしてそれを自分の文字列で初期化しただけです)、なぜscanfを使用するとクラッシュするのですか?私がscanf()に入れた実際の引数を信じています。は正しい。

#include <stdio.h>
#include <stdlib.h>
int strendmilan(char *s,char *t)
{
    int scntr = 0,tcntr = 0;
    while(*(s+(scntr++)) != '\0')
        ;
    --scntr;
    while(*(t+(tcntr++)) != '\0')
        ;
    --tcntr;
    while(tcntr >= 0)
        if(*(s+scntr--) == *(t+tcntr--))
            ;
        else
            return 0;
    return 1;
}
int main()
{
    char *s,*t; 
    /*
    scanf("%s",s);
    scanf("%s",t);
    */
    s = "HAHAHACOOL";
    t = "COOL";
    if(strendmilan(s,t) == 0)
        printf("NOT");
    else
        printf("YES");
    getch();
}
4

1 に答える 1

7

問題は、読み取った情報を格納できるscanf()バッファ(たとえば、)にポインタを送信しているが(および)が指すバッファスペースを割り当てていないことです。sst

char *s,*t; 
scanf("%s",s);

したがって、charの配列をに割り当てるか、をs使用malloc()してストレージを割り当て、その呼び出しの戻り値をに割り当てることができますs

于 2012-09-09T17:12:34.213 に答える