动态char数组,大小是否固定?

时间:2012-04-18 04:32:17

标签: c arrays dynamic

我正在尝试动态创建一个char数组。但是,无论我把哪个数字作为大小数组的期望值,它只是保持使用4具有大小。如果我放置3,2甚至8,10则不会改变......

我初始化它的部分......

char *x;

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

if(x == NULL )
{
    return;
}

cout <<"Size_Vector = "<<sizeof(x)<<endl; //Keep making the size of the array 4..no matter what

4 个答案:

答案 0 :(得分:2)

xchar *类型的指针。 sizeof(x)返回指针的大小而不是数组大小。

通常,由于 array decaying ,即使指针指向数组,也无法从指针类型中了解数组大小。

char *x = malloc(sizeof(char)*10);
// This will give you 4
printf ("%d\n", sizeof(x));

但是你可以得到一个数组类型的大小。

char x[10];
// This will give you 10
printf ("%d\n", sizeof(x));

答案 1 :(得分:2)

sizeof(x)返回指针的大小而不是分配的内存或数组的大小。

它总是返回4指针在你的环境中的大小为4,它对所有人来说都是一样的。

您必须跟踪自己分配的内存量和数量。还要确保不要超出分配的内存范围。

答案 2 :(得分:0)

malloc调用返回一个void指针,当你说sizeof(指针)时,你要求指针的大小,而不是你刚刚声明的内存块。所以它给你4/8 / ...字节取决于在你正在使用的m / c上。

试试这个:

char * cptr;

int * iptr;

printf(“整数指针的大小为:%d \ n”,sizeof(iptr));

printf(“字符指针的大小为:%d \ n”,sizeof(cptr));

注意: malloc 指向通过调用动态获得的内存块的第一个元素的地址(即10 * 1 = 10个字节)。

答案 3 :(得分:0)

这是我为你写的一小段代码,如果你真的想通过调用calloc找到你保留的内存块的大小,虽然很明显,当你说10个1个字节的空格时,你会去像这里的情况一样得到10个字节,表示你想要10 * sizeof(char):

包括

包括

的main(){

    char *ptr = NULL;

    int i = 0;

    int size = 0;

    int n = 0;

    printf("Enter the size of the dynamic array in bytes : ");

    scanf("%d",&n);

    ptr = (char*) calloc (n,sizeof(char));

    for(i=0;i<n;i++){

            size = size + sizeof(ptr[i]);

    }

    printf("Size is %d\n",size);

}