,所以我试图从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,它的速度比使用时循环更快。