0

バグというよりちょっとした不快感がありますが、なぜそれが発生しているのかわかりません。次のように宣言された配列インデックスと 2D gchar 配列があります。

gchar FilterArray[10][51];
static uint8_t ArrayIndex = 0;
static gchar ScanLine[9640];

さて、初めて Array Index を使用すると、どういうわけか値が 115 になります。使用する前に、コードのどこにも設定しませんでした。strcpy コマンドで使用した後にのみ出力すると、その値は 115 になります。strcpy コマンドの前に出力すると、プログラムの実行中は正しい値になります。

while(FilterAmount != 0)
{
    g_io_channel_read_chars (source,(gchar *) ScanLine,1,&BytesRead,&GlibError);
    if(ScanLine[0] == FilterTerminator[0]) { 
        printf("Array Index: %i\n", ArrayIndex);
        if(strlen(FilterName) > 0){
            printf("Array Index: %i\n", ArrayIndex); //if I only print before, value is correct
            strcpy(FilterArray[ArrayIndex],FilterName); 
            printf("Array Index: %i\n", ArrayIndex); //if I only print after, value is incorrect
            ArrayIndex++; 
            FilterAmount--; 
            FilterName[0] = '\0'; 
        }
    }
    else {
        strcat(FilterName, ScanLine);
    }
}
4

1 に答える 1

0

おそらく、FilterNameは過度に長く、 の末尾を超えstrcpy(FilterArray[ArrayIndex],FilterName)て書き込みます。値がレジスタに保持され、上書きされたメモリの場所から再度ロードされないため、可能性のある前に印刷された場合、それは正しいようです。FilterArrayArrayIndexArrayIndexstrcpy

于 2015-05-06T09:30:45.457 に答える