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