0

このループで項目を 1D 配列から 2D 配列に移動しようとしていますが、たまたま無限ループが発生して何か問題が発生しています。

printf("Enter plaintext :");
scanf("%s",&plaintext);



while(plaintext[k]!='\0')
{

    for (i=0;i<5;i++)
    {
        for (j=0;j<5;j++)
        {
        chip[i][j]=plaintext[k];
        k++;
        }
    }
}
4

2 に答える 2

0

変数kは関係なくインクリメントされif(plaintext[k]!=NULL)、境界を越える可能性があります。だから代わりに

if (plaintext[k] != NULL)
    chip[i][j] = plaintext[k];
else
    c = +1;
k++;

試す

if (plaintext[k] != NULL)
    chip[i][j] = plaintext[k++];
else {
    c = +1;
    break;
}

一方、lengthが 2 次元配列のサイズよりも長い場合、初期の反復でコピーされた文字は上書きされます。

于 2013-03-18T00:59:46.530 に答える
0
    scanf("%s", plaintext);

    for (i=0;i<5;i++){
        for (j=0;j<5;j++){
            chip[i][j]=plaintext[k++];
            if(plaintext[k] == '\0'){
                i=j=5;//break;
            }
        }
    }

他の方法

    char *p;

    printf("Enter plaintext :");
    scanf("%s", plaintext);

    p=&chip[0][0];
    while(k < 25 && plaintext[k]!='\0'){
        *p++ = plaintext[k++];
    }

ショーチップ

    for (i=0;i<5;i++){
        for (j=0;j<5;j++){
            putchar(chip[i][j]);
            if(--k == 0)
                i=j=5;//break;
        }
        putchar('\n');
    }
于 2013-03-18T06:53:42.513 に答える