3

これは私のソースコードです:

#include <stdio.h>
#include <string.h>

void main()
{
    int broj_znakova,i=0;
    char niz1[81],niz2[81];

    printf("Enter something, for end Ctrl/c \n\n");
    while(fgets(niz1,81,stdin)!=NULL)
    {
        continue;
    }
    printf("You just enter: %s \n",niz1);
    printf("This string is long %d\n",(strlen(niz1)-1));
    strcpy(niz1,niz2);
    printf("niz2 is %s\n",niz2);
    if(strcmp(niz1,niz2)==0)
    {
        printf("niz1 and niz2 is same\n");
    }
    else
    {
        printf("niz1 != niz2\n");
    }
    while(niz1[i]!='\n')
    {
        if(niz1[i]==' ')
        {
            broj_znakova ++;
            i=i+1;
        }
    }
    printf("Spaces in string = %d\n",broj_znakova);
}

Ctrl/ci を押すと奇妙な文字がたくさん表示されます。誰か助けてくれませんか??? 私はフラッシュについて何かグーグルで調べましたが、私は新しいです:)

4

3 に答える 3

1

の内容niz2は初期化されていません。未定義の動作が発生します。にコピーniz1するつもりだったのかもしれませんniz2。その場合は、strcpy呼び出しでパラメーターを逆にする必要があります。ではstrcpy、最初のパラメーターがターゲットです。

broj_znakova変数は決して初期化されないことにも注意してください。

于 2012-06-05T23:13:37.593 に答える
1

C は (一般に) メモリ内の情報を「ゼロ アウト」しないので、システムなしで何かを印刷する場合、変数を割り当てるときに、その時点でメモリ内にあるものは何でも (単語として論理的に読み取り可能かどうかに関係なく) 取得します。これが文字列であることを知っていると、NULL 終了文字に遭遇するまで印刷を続けます。何もない場合は、メモリ内にあるものをすべて印刷しようとし、これにより奇妙な文字が生成されます。

于 2012-06-05T23:14:59.287 に答える
0

この行で

strcpy(niz1,niz2);

パラメータが逆になっていると思います。strcpy(niz2、niz1);である必要があります。表示されている奇妙な文字は、niz2 [81]にメモリが割り当てられているが、「入力」されていないためです。したがって、割り当てに含まれる可能性のある「魔法の」データを取得できます。つまり、何かを入れるか、memsetなどを実行するまでです。

于 2012-06-05T23:19:20.007 に答える