Указывая массив строк внутри пустоты

У меня небольшая проблема с передачей указателя в пустоте. Эта пустота показывает только первую позицию массива структуры. Когда цикл переходит во вторую позицию, я получаю «ошибку сегментации». Я пытался показать массив внутри основного с тем же циклом, и он работает. В чем проблема?

typedef struct starr{
char string[100];
int occ;
} starr;

int main(){
int n;
starr *array_str;
//insert n and array_str
array_str=(starr *)malloc(sizeof(starr)*n);
view(&array_str,n);
}

void view(starr *array_str, n){
int i;
for(i=0;i<n;i++){
printf("String %s",array_str[i]->string);
}
}

-1

Решение

#include <stdio.h>
#include <stdlib.h>

typedef struct starr {
char string[100];
int occ;
} starr;

void view(starr *array_str, size_t n);

int main() {
size_t n;
// initialize n
starr *array_str;
array_str = (starr *)calloc(n, sizeof(starr));
// do stuff with array_str
view(array_str, n);

free(array_str); // go! be free!
}

void view(starr *array_str, size_t n) {
size_t i;
for(i = 0; i < n; i++){
printf("String %s", array_str[i].string);
}
}

1: view принимает starr *, а также array_str это уже тот тип, поэтому нет необходимости ссылаться на него &,

2: так как array_str это starr *его индекс (например, array_str[i]) это starr так что используйте . обозначение вместо -> нотации.

3: calloc очистит байты при объявлении памяти, чтобы они были инициализированы в NULL байт, и вы избежите печати строки, которая может вызвать переполнение буфера, если вы по какой-либо причине не дадите им правильные значения.

4: n должен быть типа size_t быть согласованным с его значением, которое является числом индексов в массиве.

5: не забудьте free(array_str); так как вы инициализировали его с помощью malloc / calloc,

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector