gpt4 book ai didi

c - 将内存分配给双指针?

转载 作者:太空狗 更新时间:2023-10-29 16:34:10 27 4
gpt4 key购买 nike

我无法理解如何分配内存到双指针。我想读取一个字符串数组并将其存储。

    char **ptr;
fp = fopen("file.txt","r");
ptr = (char**)malloc(sizeof(char*)*50);
for(int i=0; i<20; i++)
{
ptr[i] = (char*)malloc(sizeof(char)*50);
fgets(ptr[i],50,fp);
}

我只是分配了一大块内存而不是这个存储字符串

  char **ptr;
ptr = (char**)malloc(sizeof(char)*50*50);

会不会错了?如果是,为什么会这样?

最佳答案

您的第二个示例是错误的,因为从概念上讲,每个内存位置都不会保存 char*,而是保存 char。如果您稍微改变一下想法,它会对此有所帮助:

char *x;  // Memory locations pointed to by x contain 'char'
char **y; // Memory locations pointed to by y contain 'char*'

x = (char*)malloc(sizeof(char) * 100); // 100 'char'
y = (char**)malloc(sizeof(char*) * 100); // 100 'char*'

// below is incorrect:
y = (char**)malloc(sizeof(char) * 50 * 50);
// 2500 'char' not 50 'char*' pointing to 50 'char'

因此,您的第一个循环将是您如何在 C 中处理字符数组/指针数组。为字符数组的数组使用固定的内存块是可以的,但是您将使用单个 char* 而不是 char**,因为您不会有任何内存中的指针,只是 chars.

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

for (ii = 0; ii < 50; ++ii) {
// Note that each string is just an OFFSET into the memory block
// You must be sensitive to this when using these 'strings'
char *str = &x[ii * 50];
}

关于c - 将内存分配给双指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com