我的一个朋友在处理SHA加密的函数中查看了这个开源SSL代码,并注意到这个奇怪的片段:
ctx->total[0] += (uint32_t) ilen; // ilen is of type size_t
ctx->total[0] &= 0xFFFFFFFF;
if( ctx->total[0] < (uint32_t) ilen )
ctx->total[1]++;
Run Code Online (Sandbox Code Playgroud)
我们无法弄清楚这个代码的两个方面.首先,ANDs ctx->total[0](类型uint32_t)与0xFFFFFFFF,不应做任何事情.在二进制中,这与所有1s进行AND运算,它应该产生相同的值.在我看来,这两行是相同的:
ctx->total[0] &= 0xFFFFFFFF;
ctx->total[0] = ctx->total[0];
Run Code Online (Sandbox Code Playgroud)
如果我是对的,为什么这条线呢?一些安全原因?如果我错了,怎么和为什么?
其次,if假设AND没有做任何事情,我们不明白什么时候会成真.如果AND什么都不做,那么if基本上是:
if (ctx->total[0] < ctx->total[0])
Run Code Online (Sandbox Code Playgroud)
这永远不应该是真的.我们缺少什么?
如果你想看到头文件来说服自己ctx->total[0]是类型uint32_t,或者出于其他原因,你可以在这里找到它.
另外,我的第一个野生的猜测是,有一些偷偷摸摸的事情发生时,我们投ilen自size_t到uint32_t,但我仍然停留和困惑.
我在Mountain Lion的OS X 10.8.1上使用Valgrind版本3.8.0.关于与10.8.1的兼容性,Valgrind的网站说(italics mine):
Valgrind 3.8.0适用于 {x86,amd64} -darwin(Mac OS X 10.6和10.7,支持10.8).
那么,我知道10.8.1只有"有限的支持".尽管如此,这个错误报告说(斜体矿):
这个(最新的3.8.0版本)使Valgrind 编译并能够在OSX 10.8上运行小程序.但是请注意,它仍然使用更大的应用程序断言,并且根本没有正确检查32位程序(Memcheck错过了大多数错误).
好没关系.因此,如果气质,Valgrind应该在10.8.1上工作.所以现在我的问题是:
我能够很好地让Valgrind在10.8.1上编译,但是当我在几个小C程序上运行它时,我看到了一些奇怪的结果.为了尝试减少问题的可能原因,我最终编写了以下"程序":
int main () {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我会说,不是很令人兴奋,而且很少有虫子的余地.然后,我编译并通过Valgrind运行它:
gcc testC.c
valgrind ./a.out
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
==45417== Command: ./a.out
==45417==
==45417== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==45417== WARNING: Expect incorrect results, assertions and crashes.
==45417== WARNING: In particular, Memcheck on 32-bit programs will fail to
==45417== WARNING: detect any errors associated with heap-allocated …Run Code Online (Sandbox Code Playgroud) 我喜欢'.vim中的命令.来自:help '.:
'. `.
Run Code Online (Sandbox Code Playgroud)
[跳转到]进行最后一次更改的位置.该位置处于或接近变更开始的位置.
好.但这是我的问题:我使用一个autocmd函数在我的文件头中添加"最后修改"行.因此,在每次写入之后,'.不会让我的"真正的"最后一次更改,而是我的文件标题.我目前的解决方案是我试着记住用我的当前编辑点来标记ma,所以我可以'a回到它.我有时会忘记,即使我记得,也是另外几次按键.
我理想的解决方案是某种命令,告诉vim不要记住动作.我可以在autocmd函数跳转之前发送此命令,写入最后修改的行,然后在autocmd函数完成后取消它.这样,与之关联的位置'.就不会改变.但是,我对任何其他更高效的选项持开放态度.
如果你想看到它,这就是autocmd它的作用:w.
function! UpdateHeader()
let b:winview = winsaveview()
" This is where I'd put the command to ignore future movements
"The periods concatenate all the arguments into one command.
"Silent! suppresses errors, usually 'pattern not found'
"The 1,6g means search only lines 1 thru 6
"Search for File Name: followed by anything …Run Code Online (Sandbox Code Playgroud) Apple已经为我们提供了故事板,我从一开始就追随它的'进化,它有一些优点和缺点,但如果你将它与oldschool"xib"文件进行比较,这肯定是一个"未来". ..
我在这里意识到的是一种叫做"外部对象"的东西.当使用标准的"xibs"时,我们总是可以从IB对象库(右侧窗格)中拖放两种特殊类型的对象
"文件所有者"是此"外部对象"的示例.
我们能够将一个或多个ExternalObject拖放到我们的xib文件中,并通过使用此UINib API实例化此类ViewController将其连接到某个外部对象:
- (NSArray *)instantiateWithOwner:(id)ownerOrNil options:(NSDictionary *)optionsOrNil;
Run Code Online (Sandbox Code Playgroud)
......是的,有可能,文件:
如果nib文件包含除File文件所有者代理对象之外的任何代理对象,则可以使用options字典为这些代理指定运行时替换对象.在该字典中,添加UINibExternalObjects键并将其值设置为包含任何代理对象(键)的名称以及要在其位置使用的真实对象的字典.代理对象的名称是您在Interface Builder检查器窗口的"名称"字段中为其分配的字符串.
现在谈到故事板 - 对象检查器中没有外部对象.这是有道理的,因为我没有找到任何允许我们将外部对象注入从故事板创建的视图控制器中的API.我们只有这个:
- (id)instantiateInitialViewController;
- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;
Run Code Online (Sandbox Code Playgroud)
所以没有办法通过我们的"选项".
然而...
在创建一个Swift项目之前,在Storyboard中没有外部对象(可能还有另一个因素可以在我的故事板中启用外部对象,我不确定).
因此,可以设置故事板允许我们将外部对象拖放到故事板中的设置.但是我们怎么能利用这个呢?如何从故事板加载视图控制器并挂钩这些代理对象?
我正在使用Vim来编辑C代码,我喜欢使用它c<movement>来快速更改文件的部分内容.特别是,我发现c2W"更改两个以空格分隔的单词"非常有用.
但是有一个用例逃脱了我:当我的光标位于单词的最后一个字符时,命令cb"更改单词"不会删除我要编辑的单词的最后一个字符.这是有道理的,因为光标在技术上是在最后一个角色之前,但它不是我想要的.
这是发生的事情,光标指示如下|:
从...开始:
This is just a typ|ical series of words
Run Code Online (Sandbox Code Playgroud)
我想把"典型"改为"不同".我按e:
This is just a typica|l series of words
Run Code Online (Sandbox Code Playgroud)
然后cb:
This is just a |l series of words
Run Code Online (Sandbox Code Playgroud)
现在l剩下一个悬挂(一个小写的L,很清楚)!那不是我想要的.
你已经注意到我在这个例子中可以简单地使用组合bcw,这会将我的光标放在单词的开头之前,然后通过整个单词进行更改.真正!但是,如果我想将"单词"改为"字符串"呢?
从...开始:
This is just a typ|ical series of words
Run Code Online (Sandbox Code Playgroud)
我想将"单词"改为"字符串".我按$:
This is just a typical series of word|s
Run Code Online (Sandbox Code Playgroud)
同样的问题!按下cb会留下一个悬挂的"s"(虽然在这个例子中会很好,因为"字符串"无论如何以"s"结尾).当然,我可以按bcw,但这是一个额外的关键,因此是不可接受的.
我是否只能忍受这种令人难以置信的困难?
我正在尝试使用从故事板构建的场景来构建应用程序的演练.
所以我填充了我的viewControllers数组,称为pages:
@interface PVCPagesViewController () {
NSMutableArray *pages;
}
@property (retain, nonatomic) NSMutableArray *pages;
@property (strong, nonatomic) UIPageViewController *pageController;
@end
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad()中:
self.pages = [[NSMutableArray alloc] init];
UIViewController *page1 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page1"];
UIViewController *page2 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page2"];
UIViewController *page3 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page3"];
UIViewController *page4 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page4"];
self.pages = [[NSMutableArray alloc] initWithObjects:page1, page2, page3, page4, nil];
Run Code Online (Sandbox Code Playgroud)
但是当我要在viewControllerAfterViewController()中从数组加载另一个视图控制器时:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSInteger index = [self.pages indexOfObject:viewController];
index++;
return [self.pages objectAtIndex:index]; …Run Code Online (Sandbox Code Playgroud) 我正在编写一些特定于文件类型的 vim 脚本,c.vim当cpp.vim我注意到对于 C++ 文件时, 和c.vim都cpp.vim被执行。这很有意义,因为 C++ 是 C 的超集。但我的问题是:实现这种情况的逻辑在哪里?
也就是说,当 vim 编译时,是否有一些东西告诉它 C++ 文件也是 C 文件,或者 .vim 目录中是否有某个文件控制这种行为?或者完全是别的什么?
值得注意的是,检查 vim 已分配给我的 C++ 文件的文件类型(使用:set ft?)返回cpp,而不是像本问题c.cpp中讨论的那样。
我正在为iOS创建一个应用程序而且我遇到了数学问题.我无法弄清楚如何将double乘以int.这甚至可能吗?这是我被困的地方:
double *one = 465654753464353;
int *two = 4;
double *sum = one * two;
Run Code Online (Sandbox Code Playgroud)
谢谢
objective-c ×3
vim ×3
c ×2
ios ×2
memory-leaks ×1
nsbundle ×1
storyboard ×1
valgrind ×1
xib ×1