C ++,从网站获取文本,第3部分

时间:2010-05-04 01:33:47

标签: c++

所以,感谢所有的帮助人员,我只有最后一个问题,我将网站源码放在char var中,然后阅读产品标题(我已经知道了),但是只有我才有效从neweggs页面上的某个特色产品中获取部分源代码或仅部分html。我认为该程序正在崩溃,因为当我需要获取所有三个标题并将它们放入数组时,它不知道要选择哪个标题。有任何想法吗?谢谢。这是解析器代码:

http://paste2.org/p/809045

非常感谢任何解决方案。

/**
 * num_to_next -
 * takes in a pointer to a string and then counts how many 
 * characters are until the next occurance of the specified character
 * @ptr: the pointer to a string in which to search
 * @c: char delimiter to search until
 **/


int num_to_next(char *ptr, char c)
{
        unsigned int i = 0;
        for (i = 0; i < strlen(ptr); i++) {
                if (ptr[i] == c) {
                        return i;
                }
        }
        return -1;
}


/**
 * space_to_underscore -
 * this should help to alleviate some problems when dealing with 
 * filepaths that have spaces in them (basically just changes all 
 * spaces in a string to underscores)
 * @string: the string to convert, yo
 **/


int space_to_underscore(char *string)
{
        for (unsigned int i = 0; i < strlen(string); i++) {
                if (string[i] == ' ') {
                        string[i] = '_';
                }
        }
        return 0;
}

char *file_name = (char *)malloc(sizeof(char *)); // allocate memory for where the app name will be stored
memset(file_name, 0, sizeof(file_name)); // zero the memory

char td_one[] = "<ul class="featureCells"><li id="ItemCell" class="cell">";

char *pstr = strstr(buffer, td_one) + strlen(td_one) + 6; // buffer is the source

char *poop = pstr + num_to_next(pstr, '>') + 1;

int blah = num_to_next(poop, '<');

strncpy(file_name, poop, blah);

// null terminate the string //
file_name[blah] = '\0';

space_to_underscore(file_name);

MessageBox(NULL, file_name, "Product Name", MB_OK);

free(file_name);

1 个答案:

答案 0 :(得分:0)

我不确定这些是你唯一的问题,但是......

首先,你不能char* filename = (char*)malloc(sizeof(char*))(嗯,你可以,但这不是你真正想要的应用程序)。

你想要的是char* filename = (char*)malloc(SIZE_OF_YOUR_STRING * sizeof(char));,所以你不能只为你的字符串分配一个抽象缓冲区,你必须知道它的预期大小。实际上,在这里你不必写sizeof(char),因为它总是等于1,但有时这种编写代码的方式可以帮助你(或其他人)理解这个块会将一个字符串存储为数组字符)。

关于同一问题的另一个例子:char* filename = (char*)malloc(65); - 没问题,并会分配一块内存来存储65个字符符号。

如果我们走得更远(你正在做memset),char*是一个普通的指针,你的情况下sizeof(filename)会返回指针的大小< / em>,但不是你的字符串。你应该在这里写的是strlen(filename)