//我调用了 3 次 strbrk ,但我需要检查是否为 != NULL ,怎么办?
if(strpbrk(posfind,"<") != NULL ){
posfind =(char*)malloc(strlen(strpbrk(posfind,"<"))+strlen(posfind)*sizeof(char*));
posfind =strcat(strpbrk(posfind,"<"),posfind);
}
//我调用了 3 次 strbrk ,但我需要检查是否为 != NULL ,怎么办?
if(strpbrk(posfind,"<") != NULL ){
posfind =(char*)malloc(strlen(strpbrk(posfind,"<"))+strlen(posfind)*sizeof(char*));
posfind =strcat(strpbrk(posfind,"<"),posfind);
}
strcat
不会为您分配新内存,您需要确保在调用它之前有足够的空间。看起来您在对 的调用中用完了空间strcat
,因此 *WHAM*。
在更新的示例中,使用一些临时变量来存储strpbrk(posfind, "<")
新的 malloc 内存的结果,如下所示:
char* temp = strpbrk(posfind, "<");
char* newstring = NULL;
if (temp != NULL) {
// You had a typo with the size, and also don't forget to add a spot for the
// terminating null character
newstring = malloc((strlen(temp) + strlen(posfind) + 1) * sizeof(char));
newstring = strcpy(newstring, temp);
newstring = strcat(newstring, posfind);
posfind = newstring;
}
当然,您还应该检查所有返回值并释放我们不再使用的所有已分配内存。
strpbrk(posfind,"<")
返回一个空指针,您将其传递给strcat
.