-2

基本的に、次のようなものを表示するプログラムが必要です: http://i.imgur.com/ZOfnEJm.png

ほとんどの場合、コードがダウンしているような気がします。||ただし、コードの一部の間に何かを表示するのに問題があります。コンパイルすると、間に何も表示されません。「フォーマット」は次のようになっているはずです:
the memory address is on the far left, followed by two groups of eight-byte sequences (each byte is represented with a two-digit hex value), followed by the ASCII representation of the hex bytes placed between the vertical bars on the far right. 16 進コードが ASCII 文字でない場合は、ピリオド (.) を表示します。

コードに続いて、次のようにします。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void DumpMem(void *arrayPtr, int numBytes);

int main()
{
    auto int numBytes;
    auto double *doublePtr;
    auto char *charPtr;
    auto int *intPtr;

    // Doubles
    printf("How many doubles? ");
    scanf("%d", &numBytes);
    doublePtr = malloc(numBytes * sizeof(doublePtr));

    if (NULL == doublePtr)
    {
        printf("Malloc failed!");
    }

    printf("Here's a dynamic array of doubles... \n");
    DumpMem(doublePtr, numBytes);
    free(doublePtr);

    // Chars
    printf("\nHow many chars? \n");
    scanf("%d", &numBytes);
    charPtr = malloc(numBytes * sizeof(charPtr));

    if (NULL == charPtr)
    {
        printf("Malloc failed!");
    }

    printf("Here's a dynamic array of chars... \n");
    DumpMem(charPtr, numBytes);
    free(charPtr);

    // Ints
    printf("\nHow many ints? \n");
    scanf("%d", &numBytes);
    intPtr = malloc(numBytes * sizeof(intPtr));

    if (NULL == intPtr)
    {
        printf("Malloc failed!");
    }

    printf("Here's a dynamic array of ints... \n");
    DumpMem(intPtr, numBytes);
    free(intPtr);
}

void DumpMem(void *arrayPtr, int numBytes)
{
    auto unsigned char *startPtr = arrayPtr;
    auto unsigned char *ptrOne = startPtr;
    auto unsigned char *endPtr = arrayPtr + numBytes;
    auto int counter = 0;

    printf("%p  ", &startPtr);

    for (; startPtr < endPtr; startPtr++)
    {
        printf("%02x ", *startPtr);
        counter++;

        if (counter == 16)
        {
            printf("|");
            for(; ptrOne < 16; ptrOne++)
            {
                if (isalpha(*ptrOne))
                {
                    printf("%c", *ptrOne);
                }
                else if (isdigit(*ptrOne))
                {
                    printf("%d", *ptrOne);
                }
                else if (ispunct(*ptrOne))
                {
                    printf("%c", *ptrOne);
                }
                else
                {
                    printf(".");
                }
            }
            printf("|");

            printf("\n");
            printf("%p  ", &startPtr);
            counter = 0;
        }
    }

}  

それで、考え?助けてください!

4

1 に答える 1