使用calloc进行数组的正确方法是什么?

时间:2011-10-02 12:08:26

标签: c pointers

我想创建一个指针数组的指针(数组中有10个指针),然后我想给指针一个值。

这是我到目前为止所做的:

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

我如何为这个数组赋值?

我试过了:

arraypointer[0] = "string"

但是我得到了一个段错误。

编辑:

我想创建一个指向指针数组的指针。每个指针都有一个struct属性。如何访问此指针的struct属性?我没有要发布的代码,因为我仍在试图弄清楚它应该是什么样子。此指针的结构将包含一个字符串,该字符串是char *字符串和int数字。我在考虑这样做:

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

3 个答案:

答案 0 :(得分:2)

更新

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";

这两条线完全没问题。如果您尝试执行类似

的操作,则会出现段错误(实际上是未定义的行为)
arraypointer[0][3] = 's';

后。

另外,如果你做了

,你会遇到麻烦
strcpy(arraypointer[0], "string");

因为您实际上没有分配arraypointer[i]指向

的任何内存

答案 1 :(得分:0)

您必须输入:

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

因为calloc意味着无效*

答案 2 :(得分:0)

//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]);
    }
}