我只是想知道是否有办法让我将一个额外的参数传递给我的比较器,然后在我的qsort函数中使用它?
例如,我有这两个比较器(一个按升序排列,另一个按降序排列)
qsort(entries, 3, sizeof(struct entry), compare_desc);
int compare_asc(const void *elem1, const void *elem2)
{
return strcmp(elem1.name.last, elem2.name.last);
}
int compare_desc(const void *elem1, const void *elem2)
{
return strcmp(elem2.name.last, elem1.name.last);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法,所以我可以做这样的事情:
int compare(const void *elem1, const void *elem2, const char *order)
{
if (strcmp(order, "asc") == 0)
return strcmp(elem1.name.last, elem2.name.last);
else if (strcmp(order, "desc") == 0)
return strcmp(elem2.name.last, elem1.name.last);
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是我的排序程序必须接受开关,如果我有2个不同的开关(+ a,-a)分别用于升序和降序,那么我必须制作2个不同的比较器功能.如果我添加更多,它会变得更复杂.有没有办法改进这个程序的设计?
编辑:不允许全局和外部变量.
我正在开发一个应用程序,允许用户查看他们有权访问的收件箱的内容。我很难找到一种搜索全局地址列表的方法,而不是
AddressEntries entries = global.AddressEntries;
AddressEntry entry = entries["search value"];
Run Code Online (Sandbox Code Playgroud)
这有效但只返回一个实例,它是第一个找到的实例。如果有多个结果,我基本上想向用户提供一个列表。
其次,我希望能够查看联系方式,但是当我使用
ContactItem contact = entry.GetContact();
Run Code Online (Sandbox Code Playgroud)
它总是返回null,我认为是因为它正在查看当前用户的联系人个人列表
如果有意义的话,我想我正在尝试在 Outlook 中创建一个简单版本的全局通讯簿窗口。
无论如何,如果有人有任何想法或参考,我将不胜感激!
谢谢帕特里克
目前我有一类此类,简化为了简化:
class MyClass {
public:
MyClass();
void* someFunc(void* param);
}
Run Code Online (Sandbox Code Playgroud)
现在我需要调用这种类型的函数(不是任何类的成员,我很遗憾无法更改)但是我还需要调用它:
void secondFunc(int a, int b, void *(*pCallback)(void*));
Run Code Online (Sandbox Code Playgroud)
现在我需要传递一个实例的someFunc的地址.
一个不起作用的样本:
MyClass demoInstance;
// some other calls
secondFunc( 1, 2, demoInstance::someFunc() );
Run Code Online (Sandbox Code Playgroud)
我也试过像以下演员:
(void* (*)(void*)) demoInstance::someFunc;
reinterpret_cast<(void* (*)(void*))>(demoInstance::someFunc);
Run Code Online (Sandbox Code Playgroud)
如何使用类的成员函数作为参数调用此函数,以便可以将其用作回调?
任何想法或评论都表示赞赏.谢谢并尊重托比亚斯
我在mac上使用eclipse IDE(版本:3.4.2),我遇到了以下问题.
当使用equal()或equalsIgnoreCase()方法比较字符串时,即使字符串相等,我也会收到false.例如,下面的代码将以下条件视为false,即使值[0] ="debug_mode"
if (values[0].equalsIgnoreCase("debug_mode"))
debug_mode = true;
Run Code Online (Sandbox Code Playgroud)
这是以下循环的一部分:
String value = dis.readLine();
String values[] = value.trim().split("=");
if (values.length >= 2)
{
Config.prnt_dbg_msg(values[0] + "\t" + values[1]);
if (values[0].equalsIgnoreCase("debug_mode"))
debug_mode = isTrue(values[1]);
if (values[0].equalsIgnoreCase("debug_query_parsing"))
debug_query_parsing = isTrue(values[1]);
if (values[0].equalsIgnoreCase("username"))
Connection_Manager.alterAccessParameters(values[1], null, null);
if (values[0].equalsIgnoreCase("password"))
Connection_Manager.alterAccessParameters(null, values[1], null);
if (values[0].equalsIgnoreCase("database"))
Connection_Manager.alterAccessParameters(null, null, values[1]);
if (values[0].equalsIgnoreCase("allow_duplicate_entries"))
allow_duplicate_entries = isTrue(values[1]);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用value[0].equal("debug_mode")并得到了相同的结果.有人知道为什么吗?
我正在尝试解析OpenOffice ODS电子表格中的内容.ods格式本质上只是一个包含许多文档的zipfile.电子表格的内容存储在'content.xml'中.
import zipfile
from lxml import etree
zf = zipfile.ZipFile('spreadsheet.ods')
root = etree.parse(zf.open('content.xml'))
Run Code Online (Sandbox Code Playgroud)
电子表格的内容位于单元格中:
table = root.find('.//{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table')
Run Code Online (Sandbox Code Playgroud)
我们也可以直接寻找行:
rows = root.findall('.//{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table-row')
Run Code Online (Sandbox Code Playgroud)
各个元素知道命名空间:
>>> table.nsmap['table']
'urn:oasis:names:tc:opendocument:xmlns:table:1.0'
Run Code Online (Sandbox Code Playgroud)
如何在find/findall中直接使用命名空间?
显而易见的解决方案不起作用.
试图从表中获取行:
>>> root.findall('.//table:table')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lxml.etree.pyx", line 1792, in lxml.etree._ElementTree.findall (src/lxml/lxml.etree.c:41770)
File "lxml.etree.pyx", line 1297, in lxml.etree._Element.findall (src/lxml/lxml.etree.c:37027)
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 225, in findall
return list(iterfind(elem, path))
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 200, in iterfind
selector = _build_path_iterator(path)
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 184, in _build_path_iterator …Run Code Online (Sandbox Code Playgroud) Dictionary<string, object> newPhotoParam = new Dictionary<string, object>();
newPhotoParam.Add("access_token", _app.AccessToken);
newPhotoParam.Add("source", "e:\\sample.jpg");
newPhotoParam.Add("message", "test photo upload");
_app.Api("/"+ albumID +"/photos", newPhotoParam, HttpMethod.Post);
Run Code Online (Sandbox Code Playgroud)
此代码上传失败
我很肯定我在这里错过了一些简单的事情.我试图在iOS中将子视图(模态视图)加载为单独的控制器.我创建了一个NIB文件,其中一个窗口指向我的控制器视图,File的Owner类设置为我的控制器类,我尝试使用nib文件的名称调用initWithNibName,但是当我尝试显示它时,它只显示一个空白视图,而不是我在NIB文件中构建的视图.如果它是模态子控制器,它可以不是NIB中的窗口吗?或者还有其他一些我错过的东西吗?
我准备把一个项目公开放在github上.在我的项目中,对于登录验证,我接受一个字符串并强烈键入它Password:
// Stripped down here on SO for brevity
public class Password
{
private const string salt = "sealab2021";
public Password(string password)
{
this.saltedPasswordHash = new MD5Hash(password + this.salt).ToString();
}
public string SaltedHash { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
显然,如果盐是公众可见的,那盐就没用了.
其他人如何在开源项目中加密密码并保持盐密码安全隐藏?
盐是否存在于文件系统的某个位置并在应用程序启动时加载?看起来像是一个合理的解决方案,但如果我要实际使用github进行源代码控制,而不仅仅是在发布新版本时对github进行转储,那么该文件仍然可供公众访问.
我在C中有一堆math/dsp算法.单个函数,每个文件一个函数,没有花哨的链接或包含或预处理器指令,只有c99和标准库调用(主要是memset和memmoves来处理数组复制等).翻译它们不是一个大问题,但需要时间.我想知道是否有一些C - > Javascript翻译工具,以加快工作.
请注意我不需要一个完美的翻译,无论如何我会把手放在最后的结果上.我需要的是一个简单的工具,可以帮助解决基本的"无聊"问题.
有人听说过这样的事吗?
编辑:似乎emscripten会做的伎俩.
有没有办法用JavaScript/jQuery控制浏览器滚动?
当我将页面向下滚动一半,然后触发重新加载时,我希望页面打包到顶部,而是尝试查找最后一个滚动位置.所以我这样做了:
$('document').ready(function() {
$(window).scrollTop(0);
});
Run Code Online (Sandbox Code Playgroud)
但没有运气.
编辑:
因此,当我在页面加载后调用它们时,你的答案都有效 - 谢谢.但是,如果我只是在页面上刷新,看起来浏览器计算并滚动到.ready事件后的旧滚动位置(我也测试了body onload()函数).
那么跟进是,有没有办法防止浏览器滚动到其过去的位置,或者重新滚动到顶部它做它的事情后?