Как правильно использовать calloc для массива? - PullRequest
0 голосов
/ 02 октября 2011

Я хочу создать указатель на массив указателей (с 10 указателями в массиве), затем я хочу дать указателю значение.

Это то, что я имею до сих пор:

char **arraypointer = calloc (10, sizeof (char*));

Как мне дать значение этому массиву?

Я пробовал:

arraypointer[0] = "string"

Но я получаю ошибку сегмента.

Edit:

Я хочу создать указатель, который указывает на массив указателей. Каждый из этих указателей будет иметь свойство struct. Как можно получить доступ к свойству struct для этого указателя? У меня нет кода для публикации, потому что я все еще пытаюсь понять, как это должно выглядеть. Структура для этого указателя будет содержать строку, которая является строкой char * и целым числом. Я думаю, что это работает так:

arraypointer[0]->string = "this";
arraypointer[0]->number = 3;

Ответы [ 3 ]

2 голосов
/ 02 октября 2011

Обновление:

struct mystruct* pointer = calloc(N, sizeof(struct mystruct));
pointer[0].string = "this"; //notice . instead of ->
          ^
pointer[0].number = 3;
          ^

Оригинальный ответ:

char **arraypointer = calloc (10, sizeof (char*));
arraypointer[0] = "string";

Эти две строки совершенно в порядке. Вы бы получили segfault (фактически неопределенное поведение), если бы попытались сделать что-то вроде

arraypointer[0][3] = 's';

позже.

Кроме того, вы бы попали в беду, если бы сделали 1020 *

strcpy(arraypointer[0], "string");

потому что вы на самом деле не выделили памяти, которая arraypointer[i] указывает на

0 голосов
/ 07 сентября 2016
//READING STRINGS USING POINTERS (CALLOC)   

#include<stdio.h>
#include<stdlib.h>
int main() {

    int n;
    printf("Enter number of Strings : \n");
    scanf("%d", &n);
    char** a = (char**) calloc(n, sizeof(char*));
    int i=0;
    printf("Enter Strings : \n");
    for (i=0;i<n;i++) {
        a[i]= (char*) malloc(100*sizeof(char));
        scanf("%s", a[i]);
    }

    i=0;
    printf("**************\n");
    for (i;i<n;i++) {
        printf("%s\n", a[i]);
    }
}
0 голосов
/ 19 апреля 2014

Вы должны ввести:

char **arraypointer = (char**) calloc (10, sizeof (char*));

Поскольку calloc предназначен для void *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...