Присвоение значений элемента массива не работает должным образом - PullRequest
0 голосов
/ 11 января 2019

Я думал, что, наконец, добираюсь куда-то в С, но ударил кирпичную стену на этом. Я только что потратил последние 30 минут на поиск возможных решений, некоторые из которых включают memcpy, strcpy и т. Д., Но ни одна из них, похоже, не решает мою проблему. Возможно, я неправильно их использую.

Я создал базовую программу, иллюстрирующую мою проблему. Я надеюсь, что показ того, как исправить эту часть кода, поможет мне лучше понять, где я ошибаюсь.

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

//The program is trying to attempt to give 'test[0] a value of 255'

int main(int argc, char ** argv)
{
    //example variables
    int height = 4;
    int width = 4;
    unsigned char image[width][height];
    char *test;

    //gave the 0th element a basic value
    image[0][0] = 255; 
    //prints out 'Image = 255' as expected
    printf("Image = %d\n", image[0][0]);
    //allocate test some memory
    test = malloc(height * width * sizeof(char));

    //Now the problems..

    //attempt to give test[0] the value of image[0][0]
    test[0] = image[0][0];

    //prints out '-1'
    printf("Test = %d\n", test[0]);
}

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Вы определили test как указатель на char. Однако вы присваиваете unsigned char для char (который [по-видимому] равен signed по умолчанию [в вашей среде]), поэтому 255 выражается как -1. Попробуйте это:

int main(int argc, char ** argv)
{
    //example variables
    int height = 4;
    int width = 4;
    unsigned char image[width][height];
    unsigned char *test;

    //gave the 0th element a basic value
    image[0][0] = 255; 
    //prints out 'Image = 255' as expected
    printf("Image = %d\n", image[0][0]);
    //allocate test some memory
    test = malloc(height * width * sizeof(char));

    //attempt to give test[0] the value of image[0][0]
    test[0] = image[0][0];

    //now prints out '255'
    printf("Test = %u\n", test[0]);
}
0 голосов
/ 11 января 2019

Изменить это:

char *test;

к этому:

unsigned char *test;

, поскольку вы хотите, чтобы целевой массив был того же типа, что и исходный массив.

Демонстрация в реальном времени

PS: A char обычно (как прокомментировал @Bodo) по умолчанию - signed char, где 255 приводит к -1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...