Не могу присвоить значение char указателю в структуре - PullRequest
0 голосов
/ 20 октября 2018

Я не могу присвоить значение указателю в структуре, как показано ниже .

..

struct Matrix
{
    char *A[10];
    char *Psedo[10];
    int depth;
    int startrow;
    int startcolumn;
    int exitrow;
    int exitcolumn;
};
struct Matrix matrixs ; // create new global struct

void createPsedoEmptyMatrixForBackTracking()
{
    for (int i = 0; i < matrixs.depth; i++)
    {
        for (int x = 0; x < matrixs.depth; x++)
        {
            matrixs.Psedo[i][x] = '0';
        }
    }
    printf("DONE");
}

void startMove()
{
    createPsedoEmptyMatrixForBackTracking();
}

int main(){
   startMove();
}

.

Это не полный код, но мой matrixs.depth сейчас равен 5 и как результат моего компилятора printf ("DONE") никогда не отображается , а значение также не присваивается переменной Psedo . Я понятия не имею, почему

Тогда я попытался

strcpy (matrixs.Psedo [i] [x], '0')

вместо

matrix.Psedo [i] [x]= '0'; .

.

И это показало

предупреждение: передача аргумента 1 из 'strcpy'делает указатель из целого числа без приведения [-Wint-преобразование]

, а также printf ("DONE) ; никогда не показывается

1 Ответ

0 голосов
/ 20 октября 2018

Вам необходимо выделить память для переменной Psedo.Это массив указателей.На что они указывают?Они не указывают на какую-либо действительную ячейку памяти.Доступ к нему неопределенное поведение .

Если вам не нужен массив указателей, вы можете просто иметь массив.Это не потребует явного распределения, как в настоящем случае.char *Psedo[10]; будет char Psedo[10][MAXLEN];

Во-вторых strcpy(matrixs.Psedo[i][x], '0') будет strcpy(matrixs.Psedo[i], "0").Кормление strcpy что он хочет ... он ожидает указателей.В вашем предыдущем случае целочисленное значение char считается указателем.Вот почему предупреждение.Это также приведет к неопределенному поведению.

...