Malloc, realloc, and returning pointers in C



,所以我试图从HTML页面获取信息。我使用curl获取HTML页面。然后,我尝试解析HTML页面并将所需的信息存储在字符数组中,但我不知道该数组的大小应该是多少。请记住,这是为了进行作业,所以我不会提供太多的代码,因此我应该动态分配内存,但是由于我不知道它是多少大小,因此我必须继续使用Realloc分配内存。在功能中一切都很好,但是一旦返回,指针中就没有存储。这是代码。另外,如果有一些图书馆会为我做这件事,并且您知道,您能否将我链接到它,这会使我的生活变得更加容易。谢谢!

char * parse(int * input)
{
    char * output = malloc(sizeof(char));
    int start = 270;
    int index = start;
    while(input[index]!='<')
    {
        output = realloc(output, (index-start+1)*sizeof(char));
        output[index-start]=input[index];
        index++;
    }
    return output;
}

strchr函数在第一个参数中找到其第二个参数的第一个出现。

因此,在这里您必须找到一种从input[start]开始运行strchr的方法,将其传递为'<'作为第二个参数并存储strchr找到的长度。然后,这为您提供了为输出分配的长度。

  • 不要忘记结尾处的''字符。
  • 使用库功能将字符串从input复制到output

由于这是一项作业,您可能会自己找到其余的...

是动态读数:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main(){
 int mem=270;
 char *str=malloc(mem);
 fgets(str,mem,stdin);
 while(str[strlen(str)-1]!='n'){//checks if we ran out of space
    mem*=2;
    str=realloc(str,mem);//double the amount of space
    fgets(str+mem/2-1,mem/2+1,stdin);//read the rest (hopefully) of the line into the new space.
 }
 printf("%s",str);
}

您的输出需要以' 0'结尾。指针只是指向字符串开始的指针,没有长度,因此,如果没有' 0'(nul)作为前哨,您不知道终点在哪里。

您通常不想为每个新角色致电Realloc。Malloc()输出通常是输入的strlen(),然后在末端一次。

另外,您每次realloc时都应该将其尺寸加倍,而不仅仅是添加一个字节。但是,这需要您在单独的变量中跟踪当前分配的长度,以便您知道何时需要进行Realloc。

您可能会在函数上读取strcspn,它的速度比使用时循环更快。

相关内容

  • 没有找到相关文章

最新更新