这是快速背景:我有一个客户端和一个服务器程序通过Unix套接字相互通信.在服务器端解析收到的消息时,我试图使用strncmp来确定要采取的操作.
我遇到的问题是确切地想知道strncmp的长度参数使用了什么.这是有问题的原因是我的一些消息共享一个共同的前缀.例如,我有一条消息"getPrimary",它使服务器响应主服务器地址和消息"getPrimaryStatus",这会导致服务器响应主服务器的状态.我最初的想法是做以下事情:
if(strncmp(message,"getPrimary",strlen("getPrimary"))==0){
return foo;
}
else if(strncmp(message,"getPrimaryStatus",strlen("getPrimaryStatus"))==0){
return bar;
}
Run Code Online (Sandbox Code Playgroud)
这个问题是当我发送服务器"getPrimaryStatus"时,代码将始终返回foo,因为strncmp在字符串中检查得不够远.我可以将strlen(message)作为strncmp的长度参数传递,但这似乎打败了使用strncmp的目的,即在意外输入的情况下防止溢出.我确实有一个静态变量用于我可以读取的最大消息长度,但它似乎传递了这个,因为长度只是确保如果消息溢出,效果最小化.
我想出了一些解决方案,但它们并不是很漂亮,所以我想知道是否有一种解决这个问题的常用方法.
作为参考,我目前的解决方案是:以这样的方式命令我的if/else if语句,以便按照长度递减的顺序检查具有公共前缀的任何消息(这似乎是在我的代码中为任何人抛出地雷的一种非常好的方法试图稍后添加一些东西).
将我的消息与公共前缀组合在一起并首先查找后缀:
if(strncmp(message,"getPrimary",strlen("getPrimary"))==0){
if(strncmp(message,"getPrimaryStatus",strlen("getPrimaryStatus"))==0){
return bar;
else
return foo;
}
}
Run Code Online (Sandbox Code Playgroud)
但这只是感觉很乱,特别是因为我有大约20种不同的可能消息,我正在处理.
创建一个包含我所有可能消息的数组,向我的init序列添加一个函数,该函数将按降序长度对数组进行排序,并让我的代码搜索该列表的元素,直到找到匹配为止.这看似复杂而愚蠢.
看起来这应该是一个普遍的问题,应该在某个地方找到解决方案,但到目前为止我还没有找到任何东西.
在此先感谢您的帮助!
我需要定义一个函数'Compose',它取一个列表'L',它是一个函数列表.当我指定一个适合列表中所有函数的参数时,最后一个函数使用此参数计算自身.然后将结果传递给倒数第二个函数,依此类推,直到我们到达列表中的第一个项目(函数),我们得到最终结果.
例如
组成((fn N - > N + 1)^(fn N - > 2*N)^#)3.
给出答案7.
我必须用一种名为SAL(简单的应用语言)的函数式编程语言来编写这个语言,这个语言由我大学的讲师设计(因此上面有趣的语法(^分隔列表项和#mark列表的末尾)).
如果任何解决方案都可以用伪代码编写,请记住我不能使用非常理解的循环,变量等.显然,解决方案是一个单行的答案.我想它涉及递归(99%的任务函数都可以!).
另外我不明白Haskell(猜测我必须学习!)所以psuedo代码甚至简单的英语都会很棒. -
谢谢一堆.
我正在开发一个 Qt 应用程序,我需要支持 Linux、Windows 和 Mac OS X。但唯一的问题是我没有 Mac。是否可以在 Linux 上编译适用于 Mac OS X 的应用程序并将其打包到 .dmg 文件中?
我还担心我的应用程序依赖于 OpenSSL,我可以在我的 Linux 机器上编译适用于 Mac OS X 的 OpenSSL 吗?
谢谢。
迭代文件时如何从文件中读取 n 行而不是仅读取一行?我有一个具有明确结构的文件,我想做这样的事情:
for line1, line2, line3 in file:
do_something(line1)
do_something_different(line2)
do_something_else(line3)
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
ValueError:太多值无法解压
现在我正在这样做:
for line in file:
do_someting(line)
newline = file.readline()
do_something_else(newline)
newline = file.readline()
do_something_different(newline)
... etc.
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为我正在编写无休止的“ newline = file.readline()”,这使代码变得混乱。有什么聪明的方法可以做到这一点吗?(我真的想避免一次读取整个文件,因为它很大)
我正在考虑构建一个非常大的Java类,Java类可以有多少方法限制?它可以进入数以百万计的方法吗?
更新:目的是,做一个"上帝"课程.
我在Rails中的动词遇到了麻烦 ......
查看资源(狗)的页面has_many(跳蚤).嵌入在狗中的show.html.haml是一个render @dog.fleas自动(?)查找并使用"fleas/_flea.html.haml"中的模板来列出与所述狗相关的每个跳蚤的调用.
这显示正确.噢!现在,在每个跳蚤的旁边,我放了一个"Kill Flea"链接进入网址://localhost:3000/dogs/1/fleas/7.由哪个生成:
= link_to("Kill Flea", [ flea.dog, flea ], :method => :delete, :confirm => "Sure? A bunny will die")
Run Code Online (Sandbox Code Playgroud)
但是每次点击该链接都没有确认...并且它会呈现跳蚤的show.html页面.这是因为如果它使用GET上/dogs/1/fleas/7,而不是删除?!?
ps-不担心蜘蛛和机器人在我的数据库中删除东西......我只是想学习Rails ......并了解发生了什么
我使用一个包含一些评论的 div-Element。我基本上使用 jQuery 来添加更多的评论,如下所示:
$(myDiv).append(
'<li>'
+ '<img width="32px" height="32px" src="mySource"/></a>'
+ '<p>' + myComment + '</p>'
+ '</li>'
);
Run Code Online (Sandbox Code Playgroud)
问题是,似乎整个 div 的高度没有正确更新!当我添加更多评论时,div 的高度会增加,但还不够,所以在一些评论之后它往往会溢出。
元素的高度实际上是如何计算的?
我正在尝试打开一个图像文件,并在变量/数组中按颜色存储像素列表,这样我就可以逐个输出它们.
图像类型:可以是BMP,JPG,GIF或PNG.其中任何一个都很好,只需要支持一个.颜色输出:RGB或Hex.
我看过几个库(RMagick,Quick_Magick,Mini_Magick等),它们看起来都有些过分.Heroku在ImageMagick上也遇到了一些困难,我的测试也没有运行.我的申请是在Sinatra.
有什么建议?
我正在将现有的构建脚本从<mxmlc />to转换<compc />为生成 swc。
但是,构建失败,给出错误:
[compc] C:\xxxx\LogViewer.mxml(32): Error: Access of undefined property VERSION.
[compc]
[compc] private static const VERSION:String = CONFIG::VERSION;
Run Code Online (Sandbox Code Playgroud)
在我的 ant 任务中,我定义了以下内容:
<compc compiler.as3="true" output="${output.dir}/${swc.name}.swc" incremental="true" fork="true" maxmemory="512m" compiler.show-deprecation-warnings="false">
<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" />
<source-path path-element="${srcdir}" />
<include-sources dir="${srcdir}" includes="*" />
<external-library-path dir="${swc.libs.dir}" append="true">
<include name="*.swc" />
</external-library-path>
<external-library-path dir="${output.common.swc.dir}" append="true">
<include name="*.swc" />
</external-library-path>
<compiler.define name="CONFIG::VERSION" value="${build.version}" />
<compiler.define name="CONFIG::RELEASE" value="${config.release}" />
<compiler.define name="CONFIG::DEBUG" value="${config.debug}" />
<compiler.define name="CONFIG::AUTOMATION" value="false" />
</compc>
Run Code Online (Sandbox Code Playgroud)
这种方法可以很好地完成任务,但现在失败了。
在 compc 中使用编译器常量的正确方法是什么?
我想编写一个使用鼠标滚轮缩放类似Google地球的组件.
我有一个使用onMouseWheel的组件,我有属性MaxZoom MinZoom和Zoom有一个更好的选项,StretchDraw与位图我试图获取组件区域的位置在窗体中
据我所知,我必须找到每个父项,直到找到tCustomform并添加所有Component的顶部和组件,以获取对象位置以找到我的对象位置.有没有更好的办法
一旦我有了位置,我可以从鼠标光标位置缩放地图,如果鼠标在我的对象上并且在哪里放大.
有任何人看到任何代码请