将2D数组连接到字符串中会导致分段错误

我正在尝试使用strcat将矩阵连接为一个长字符串,但是每当我尝试访问矩阵或使用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()时,都会遇到分割错误。我可以仅在str或temp上使用printf,仅此而已。所有注释掉的行都会导致段错误。任何帮助将不胜感激!

zsyfk0906 回答:将2D数组连接到字符串中会导致分段错误

参数的类型为int (*)[5],参数的类型为int**,这些参数不兼容,请使用:

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

此外,strcat的第二个参数期望一个char数组,并且您要向其传递单个char参数,除了str指向一个常量字符串而且不能为改变了。

您无需使用strcat来执行此操作,您可以通过适当的转换将它们直接分配给output

Running sample

#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,0},{1,0}};
    char output[26]; //must have space for null terminator
    concatMatrix(matrix,output);
    printf("%s",output);
}

output字符串的大小和其余代码的情况下,这仅适用于个位数,这是我的预期目的。

本文链接:https://www.f2er.com/2411627.html

大家都在问