C:分类故障与打字



在我的C代码中,我的字符串(类型'char')包含捕获的数据包的有效载荷。由于无法打印其某些内容,因此我尝试将它们打入"未签名的char"。我有一个细分错误。键入" char"会导致相同的结果。

可以将类型的结果导致分割故障吗?如果是的,那么何时会导致分割故障?

update

我正在尝试检查有效载荷是否包含任何URL。每个数据包的" payload_length"都会变化,并且可能很大。

char str[payload_length+10];
size_t size_read;
str[strlen(str)]='';//Adding '' after loading the payload contents.
if((pos=strstr((char)str,"http"))==NULL || (pos=strstr((char)str,"Host:"))==NULL || (pos=strstr((char)str,".com"))==NULL || (pos=strstr((char)str,"www."))==NULL)
printf("nNo distinct URL is presentn ");
else
printf("nURL is at %p ",pos);

问题1: (char)str。您将数组投入到一个char中。这是胡说八道,您应该知道为什么。另外,如果没有编译器消息,这应该不是编译,否则您的编译器是垃圾。

问题2:您每次更新pos||从左到右进行强制性评估。在".com"之后使用"www"是一个非常奇怪的URL。因此,在pos=strstr((char)str,".com"之后,您指着字符串的末端,您在任何地方都找不到"www"

编写如此晦涩的单线代码的替代方法可能是这样:

bool validate_url (const char* str)
{
  const char* MUST_CONTAIN[] =
  {
    "http",
    "Host:",
    ".com",
    "www"
  };
  for(size_t i=0; i<sizeof(MUST_CONTAIN)/sizeof(*MUST_CONTAIN); i++)
  {
    if(strstr(str, MUST_CONTAIN[i] == NULL)
    {
      return false;
    }
  }
  return true;
}
如果您可以假设字符串以特定顺序存在(您应该可以)。 ,则可以进行优化。 。

问题3:strlen假定字符串已经终止,因此您不能像str[strlen(str)]='';一样编写代码。

相关内容

  • 没有找到相关文章

最新更新