Конкатенация двухмерного массива в строку вызывает ошибку сегментации - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь объединить матрицу в одну длинную строку, используя strcat, но продолжаю получать ошибки seg всякий раз, когда я пытаюсь получить доступ к матрице или использую strcat. Ошибка сегментации возникает, как только я вхожу в функцию. Первый printf никогда не выполняется.

void concatMatrix(int **matrix, char *output){ 
  printf("%s", "SDFSDFDSFDSFDSF");

  char *str = "";
  char *temp = "sdds";
  for(int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
       // temp = (char)matrix[i][j];
       // strcat(str, temp);
       // strcat(str, ' ');
       // printf("%d\n", matrix[i][j]);
    }
    // strcat(str, "\n");
    strcat(output, str);
    // printf("%s", output);
  }
}

Это - то, как матрица и вывод были объявлены, и матрица была заполнена значениями перед вызовом функции.

int matrix[5][5];
char output[25];

Всякий раз, когда я пытаюсь использовать матрицу или вывод или strcpy() Я получаю ошибку сегментации. Я могу использовать printf просто на str или temp, но это все. Все закомментированные строки вызовут ошибку сегмента. Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 18 апреля 2020

Аргумент имеет тип int (*)[5], а параметр имеет тип int**, они несовместимы, используйте:

void concatMatrix(int matrix[][5], char *output);

Кроме того, второй параметр strcat ожидает символ массив, и вы передаете ему один аргумент char, за исключением того факта, что str указывает на строковый литерал, который является константой и не может быть изменен.

Вам не нужно будет использовать strcat, чтобы сделать это, вы можете назначить их непосредственно на output с правильным преобразованием:

Запуск образца

#include <stdio.h>

void concatMatrix(int matrix[][5], char *output)
{  
    int index = 0;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++, index++)
        {        
        output[index] =  matrix[i][j] + '0'; //convert from int to char and assign to output
        }       
    }
    output[index] = '\0'; //null terminate the string
}

int main()
{
    int matrix[5][5] = {{1, 4, 3, 5, 2},
                        {7, 9, 5, 9, 0},
                        {1, 4, 3, 5, 2},
                        {1, 4, 3, 5, 2},
                        {7, 9, 5, 9, 0}};
    char output[26]; //must have space for null terminator
    concatMatrix(matrix, output);
    printf("%s", output);
}

Это будет работать только для однозначных чисел, которые я сбор - это целевое назначение, учитывая размер строки output и остальной код.

...