- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 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:(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
假定字符串已经以 null 结尾,因此您不能编写类似 str[strlen(str)]='\0';
的代码。
关于C : Segmentation fault with typecasting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812683/
迭代 JsonData通过 foreach 获取 IDictionary 枚举器而不是 IList 枚举器。 foreach (var jsonEntry in jsonData) 这会导致我的代码抛
long value = 0x88888888 ; int i = (int) (value & 0xff); 上述表达式的求值是如何发生的?是吗 int i = (int)value & (int)
类(class)TypeCast可以追溯到 2004 年,因此 Haskell 相当“古老”(尽管仍然相当出色)。我的问题是:如果今天在最先进的 GHC 中重新实现 [最好是 7.6,但是继续,使用
我有一个 objDataModel 类型的变量 UDataModel 继承自 AbstractDataModel public class AbstractDataModel { intern
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我在计算小费金额时遇到类型转换转换问题。 const double TIP_PERCENTAGE = .15; cout (TIP_PERCENTAGE * 100.00); return 0; 我得
我在使用 Lua 和 C++(使用 LuaWrapper)时遇到了一些问题。假设我有这些类(class): class Bar{...}; class Foo { ... std::m
我想像这样设置一个散列: {:a => Float, :b => String} 这样我就可以将它用作针对另一个散列的“类型转换”过滤器。例如: def parse_hash(input_hash)
假设你有一个对象类型: Type Person = { name?: string; color?: string; address? string; } 但是你想将该类型更改为以下类型,
假设你有一个对象类型: Type Person = { name?: string; color?: string; address? string; } 但是你想将该类型更改为以下类型,
我在 C# 中的 TypeCast 转换中遇到了一些意外行为。 尝试转换时.. float f = 123124334234234.34F; 转换为整数,如下所示: int i = (int)f; 我
我正在尝试展平列表列表,同时确保最终对象列表的类型正确。这是一个(抽象的)示例: class Space { public List ContainedSpaces {
我必须声明 Realm 字符串属性来保存从 API 获取的值,但问题是,我不知道来自服务器的数据类型。有时我会得到 String 值,有时会得到 Int 值。现在我将如何将数据保存到 Realm 。
这是我的代码: 1 #include 2 3 struct Foo; 4 5 struct Bar { 6 Foo *foo; 7
我正在为我的 SQL 数据库逻辑使用 IDbCommand 和 IDbDataParameter 接口(interface),但意识到由于接口(interface)限制,我无法获取 sqlComman
有没有办法在 C# 中执行此操作? private void Caller() { MyControl c = new MyControl(); Callee(ref c);
谁能告诉我我做错了什么。我可以将 y 类型转换为 long,但对 x/y 无效。 class Test { long convert(int x, float y) { //return (l
import java.util.Scanner; public class SumDigits { public static void main(String[] args) { // T
我有代码: import { createConnection } from 'mysql'; import { promisify } from 'util'; export default cla
我正在查看这段代码,但语法有问题: struct Instance { typedef glm::vec3(*OffsetFunc)(float); OffsetFunc CalcOf
我是一名优秀的程序员,十分优秀!