C:使用类型转换进行分段错误

时间:2017-12-14 11:51:10

标签: c network-programming segmentation-fault packet-sniffers typecasting-operator

在我的C代码中,我的字符串(类型为'char')包含捕获数据包的有效负载。由于某些内容无法打印,我尝试将它们转换为'unsigned char'。我收到了分段错误。 对'char'进行类型转换会产生相同的结果。

类型转换会导致分段错误吗?如果是,那么类型转换何时会导致分段错误?

更新

我正在尝试检查有效负载是否包含任何URL。 'payload_length'因每个数据包而异,可能非常大。

char str[payload_length+10];
size_t size_read;
str[strlen(str)]='\0';//Adding '\0' 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 present\n ");

else
printf("\nURL is at %p ",pos);

1 个答案:

答案 0 :(得分:1)

问题1: class course { protected $primaryKey = 'couseid'; } 。您将数组转换为单个(char)str。这是无稽之谈,你应该知道为什么。此外,如果没有编译器消息,这应该干净地编译,或者你的编译器是垃圾。

问题2:您每次都更新charpos从左到右进行强制性评估。在||之后获得"www"将是一个非常奇怪的网址。因此,在".com"之后,您指向字符串的末尾,您将永远不会在任何地方找到pos=strstr((char)str,".com"

编写这种模糊的单行代码的替代方法可能是这样的:

"www"

如果您可以假设字符串以特定顺序存在(您应该可以),则可以进行优化。

问题3: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; } 假设字符串已经以空值终止,因此您无法编写strlen之类的代码。