ОК, я очень старался, но есть , поэтому много вещей не так с этим кодом, что он в основном невосстановим. Пожалуйста, внимательно посмотрите на комментарии выше, опубликуйте некоторый код, который можно скомпилировать, расскажите нам, что вы ожидаете от него, что он делает и делает и в чем разница между этими двумя вещами.
Суть этой загадки, возможно, в том, что вы используете два разных метода для доступа к двумерному массиву. Допустим, вы хотите иметь массив целых чисел с n
строками и m
столбцами. Вы можете сделать это, объявив:
int **array1 = malloc(n * sizeof(int *));
for (int a=0; a<n; a++)
array1[a] = malloc(m * sizeof(int));
Таким образом, вы получаете доступ к целому числу в строке i
и столбце j
как array1[i][j]
.
Кроме того, вы можете сделать это, объявив:
int *array2 = malloc(n * m * sizeof(int));
и доступ к целому числу в строке i
и столбце j
как array2[i * m + j]
.
Вот код, который должен скомпилироваться
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int row = 5;
int column = 10;
// char **array; // declaration moved into main()
int rowcount = 0;
int main(void) { // added main() function
int **array = malloc(sizeof(int *) * row); // include type (int **); remove cast: (int **); moved into main()
int **x_ptr = array; // changed type to int **; moved into main()
// Allocate memory for array, so we can assign integers to
// array[i][j] where:
// i <= 0 < column
// j <= 0 < column
// Note that:
// array[i]
// is identical to:
// *(array + i)
// and:
// array[i][j]
// is identical to:
// *(*(array + i) + j)
for (int i = 0; i < row; i++) {
// array[i] = malloc(sizeof(int) * column); // removed cast, you're not using array[] anyway
x_ptr[i] = malloc(column * sizeof(int)); // removed cast
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++) {
if (j == 0) {
rowcount += 1;
// Create a character buffer.
char snum[5] = {'\0'};
// Write the text version of integer "rowcount" into the char
// buffer "snum"
sprintf(snum, "%d", rowcount); //converts int to char
// Copy the char value of each character into the
// two-dimensional integer array. We want to copy
// snum[t] into array[i][t]
for (size_t t = 0; t < strlen(snum); t++)
// *(x_ptr + (i * column + j) + t) = snum[t];
array[i][t] = snum[t];
} else {
// *(x_ptr + (i * column + j)) = 0;
array[i][j] = 0;
}
}
}
for (int i=0; i<row; i++)
for (int j=0; j<column; j++)
printf("Row %d, column %d has value %d\n", i, j, array[i][j]);
return 0;
}
У меня есть файл, сохраненный как so.c
, и я использую следующую команду для его компиляции:
gcc -o so -W -Wall -pedantic so.c
Это включает предупреждения для многих вещей, которые вы не хотите делать в исходном коде. Вероятно, это не решит проблему, которая у вас есть, но она должна дать вам кое-что для работы.