как передать в функцию динамический двумерный массив?
Есть двумерный динамический массив, который надо передать в функцию через указатели. При первой же попытке достать элемент из памяти элемент появляется ошибка доступа. Если делать так, как описано тут Передача двумерного динамического массива в функцию (Си), то тоже все бесполезно. Вот та самая злосчастная функция.
void EDITTEXT(char **a, int y, char *b, int dsize) {
int i, x, d = 0, k;
for (i = 0; i <= y; i++) {
for (x = 0; a[i][x] != 0; x++) {
for (k = 0; k < dsize; k++) {
if (a[i][x] == b[k]) d++;
}
}
}
printf("%d", d);
}
а - двумерный динамический массив, b - динамический массив.
Надо найти количество одинаковых символов. Заранее благодарю за помощь.
Добавил весь код:
#include<stdio.h>
#include<string.h>
#include <malloc.h>
#define MAXSIZE 1024
int INPUTNUMBER(int a);
int STRINGINPUT(char *a, int b, int id);
void EDITTEXT(char **a, int y, char *b, int dsize);
int main() {
int dsize, num = 0, hit, xhit, yhit, x, y, i;
char *del = NULL;
char *mas = NULL;
char **text = NULL;
//ввод строки разделителей
printf("Enter delimeters: ");
del = (char*)malloc(MAXSIZE, sizeof(char));
dsize = STRINGINPUT(del, MAXSIZE, 0);
del = (char *)realloc(del, dsize * sizeof(char));
del[dsize] = 0;
puts(del);
//ввод числа
while (num == 0 || num > dsize+1) {
num = INPUTNUMBER(dsize);
}
//ввод текста
for (y = 0, yhit = 0; yhit == 0; y++) {
printf("String %d: ", y);
text = (char**)realloc(text, (y + 1) * sizeof(char*));
mas = (char*)malloc(MAXSIZE, sizeof(char));
x = STRINGINPUT(mas, MAXSIZE, 1);
mas = (char*)realloc(mas, x * sizeof(char));
text[y] = (char*)malloc(x * sizeof(char));
for (i = 0; i <= x; i++) {
text[y][i] = mas[i];
}
text[y][x] = 0;
puts(text[y]);
for (i = 0, hit = 0; i < dsize; i++) {
for (xhit = 0; xhit < x; xhit++) {
if (text[y][xhit] == del[i]) {
xhit = x;
hit++;
}
}
}
if (hit == num + 1) yhit++;
}
EDITTEXT(text, y, del, dsize);
return 0;
}
int INPUTNUMBER(int a) {
char *s;
int num = 0;
while (num == 0) {
printf("Enter number (0;%d]: ", a - 1);
s = (char*)malloc(10*sizeof(char));
gets(s);
num = atoi(s);
}
return (num);
}
void EDITTEXT(char **a, int y, char *b, int dsize) {
int i, x, d = 0, k;
for (i = 0; i <= y; i++) {
for (x = 0; a[i][x] != 0; x++) {
for (k = 0; k < dsize; k++) {
if (a[i][x] == b[k]) d++;
}
}
}
printf("%d", d);
}
int STRINGINPUT(char *a, int b, int id) {
int i = 0, hit = 0, x, xhit;
for (i = 0; hit == 0; i++) {
a[i] = getc(stdin);
if (a[i] == '\n') hit++;
if (id == 0) {
for (x = 0, xhit = 0; xhit == 0 && x < i; x++) {
if (a[i] == a[x]) {
xhit++;
i--;
}
}
}
}
a[i] = 0;
return i;
}
Ответы (1 шт):
Автор решения: return
→ Ссылка
Я толком не понял что вы хотели сказать, но скорее всего ваша должна программа выглядит вот так:
typedef unsigned long uint32;
typedef char* string;
int findCharCount(const string* lines, const uint32 lineCount, const string chars) {
// checks
uint32 count = 0;
for (uint32 i = 0; i < lineCount; ++i)
for (char* chr = lines[i]; *chr; ++chr)
for (char cmp = chars; *cmp; ++cmp)
if (*chr == *cmp)
++count;
return count;
}
У вас нет никаких x и y. Это не двумерный массив, а вложенный.
Двумерный массив:
sizeX
/\
||
+-----++-----+
| |
01 02 03 04 05-+
02 03 04 05 06 |
03 04 05 06 07 +-> sizeY
04 05 06 07 08 |
05 06 07 08 09-+
Вложенный массив:
[01 02 03 04 05]
[37 05 11]
[37 95 17 00 37 10 58 55 85 36 14 07]