情况:我\xe2\x80\x99有一个使用UTF-8作为其内部字符串格式的外部DLL。接口函数都使用 PAnsiChar 来传递字符串。
\n\n我的应用程序的其余部分使用 Delphi\xe2\x80\x99s 本机string类型;由于 I\xe2\x80\x99m 使用 Delphi 2010,这将映射到UnicodeString.
如何可靠地将这些 PAnsiChar 参数(指向 UTF-8 编码字符串)转换为 UnicodeString?
\n\n我有这个功能,我认为效果很好:
\n\nfunction PUTF8CharToString(Text: PAnsiChar): string;\nvar\n UText: UTF8String;\nbegin\n UText := UTF8String(Text);\n Result := string(UText);\nend;\nRun Code Online (Sandbox Code Playgroud)\n\n...但是现在我\xe2\x80\x99遇到了结果字符串损坏的情况;当我将 PAnsiChar 保存到文件时,它 \xe2\x80\x99s 很好;但是当我使用上述函数转换后保存生成的字符串时,它\xe2\x80\x99s 已损坏。
\n\n或者应该正常工作,这是否表明存在其他内存(取消)分配问题?
\n\n编辑:我最终通过将转换后的字符串分配给局部变量字符串而不是直接将其传递给另一个函数来摆脱内存损坏。
\n我最近收到了一位用户抱怨我的应用程序崩溃了.我从用户的错误日志中提取了以下内容,并且能够看到发生问题的原因:
12-17 10:31:12.446 I/PLAYLIST( 3158): PreparePlaylist
12-17 10:31:12.446 I/PLAYLIST( 3158): URL: http://f69cbd7a-3d91-4bf5-b4c6-ddb1175cf9e9.d40f2093-2013-4ad9-aec2-e99b015d61ca.070305e7-a706-4626-9ecb-777835065841.groovera.com/listen.pls
12-17 10:31:12.456 F/unknown ( 3158): stack corruption detected: aborted
12-17 10:31:12.466 D/Zygote ( 2204): Process 3158 terminated by signal (6)
12-17 10:31:12.471 I/ActivityManager( 2256): Process com.android.Player:remote (pid 3158) has died.
Run Code Online (Sandbox Code Playgroud)
检测到堆栈损坏.很好,所以我怎么知道为什么会这样?
我认为这个问题正在这个特定的类中发生,因为我希望在它死之前有更多的日志输出.此类使用套接字下载播放列表并解析它.我怎么能破坏堆栈?我已经处理过C/C++中的堆栈溢出,但是我如何在Java中处理它?
谢谢你的帮助!
我正在尝试使用动态的自动递增列编写存储过程[SQL 2008],并且这个语法已经逃过了我.
如果我有一个名为widget的表,其中包含一个名为widget_nm的列,我的目标是
SELECT [???] AS widget_id, widget_nm FROM widget
Run Code Online (Sandbox Code Playgroud)
并得到以下结果
widget_id | widget_nm
1 | bob
2 | sally
3 | fred
Run Code Online (Sandbox Code Playgroud)
我记得曾经这样做过,但我的记忆让我失望......有什么建议吗?
节日快乐!
大多数教程似乎提供了很多monad(IO,状态,列表等)的例子,然后期望读者能够抽象出整体原则,然后他们提到类别理论.通过尝试从例子中进行概括,我不会学得很好,我想从理论的角度理解为什么这种模式如此重要.
从这个线索来看: 任何人都可以解释Monads吗? 这是一个常见的问题,我已经尝试查看大多数建议的教程(除了我的linux机器上不能播放的Brian Beck视频):
有没有人知道从类别理论开始的教程,并用这些术语解释IO,状态,列表monad?以下是我未能成功的尝试:
据我所知,monad包含一个三元组:一个endo-functor和两个自然变换.
仿函数通常显示类型:(a - > b) - >(ma - > mb)我包括第二个括号只是为了强调对称性.
但是,这是一个endofunctor,所以域和codomain不应该像这样吗?:
(a - > b) - >(a - > b)
我认为答案是域和codomain都有一种类型:
(a - > b)| (ma - > mb)| (mma - > mmb)等......
但我不确定这是否有效或符合给定的仿函数的定义?
当我们继续进行自然变革时,它会变得更糟.如果我理解正确,自然变换是二阶函子(具有某些规则),它是从一个仿函数到另一个仿函数的仿函数.因为我们已经定义了上面的仿函数,一般类型的自然变换将是:((a - > b) - >(ma - > mb)) - >((a - > b) - >(ma - > mb ))
但是我们使用的实际自然变换有类型:
a - > ma
ma - >(a - > mb) - > mb
这些一般形式的子集是否在上面?为什么它们会自然变换?
马丁
我跑了export CLASSPATH=/home/deltrem/jscheme/jscheme.jar,但现在正在工作的kawa不再工作了.有没有办法恢复CLASSPATH?
我有一个需要许多参数的脚本:
param ([string]$FOO="foo",[string]$CFG='\ps\bcpCopyCfg.ps1', [string]$CFROM="none", `
[string]$CTO="none", [switch]$HELP=$FALSE, [switch]$FULL=$FALSE, [string]$CCOL="none" `
,[string]$CDSQUERY="none", [string]$CMSSRV="none" `
,[string]$CSYBDB="none", [string]$CMSDB="none")
Run Code Online (Sandbox Code Playgroud)
从命令提示符调用时,例如
powershell.\ bcpCopy.ps1 -CFROM earn_n_deduct_actg -CTO fin_earn_n_deduct_actg -CCOL f_edeh_doc_id
一切正常.然而,我需要并行启动脚本的几个(几十个)实例,并且我编写了一个包装脚本,它将实际工作作为一个工作调用:我准备一个带有参数的数组(包括像"-CFG"这样的关键字) ")anhd将它传递给初学者:
# Prepare script block to be released
$ARGS=("-CFG ", $CFG, "-CSYBDB ", $SYBDB, "-CMSDB ",$MSDB, "-CFROM ", $SYBTBL, "-CTO ",$MSTBL)
if ($FULL) {
$ARGS = $ARGS + " -FULL"
} else {
$ARGS = $ARGS + " -CCOL $($args[5]) "
}
"Argument array:"
$ARGS
start-job -scriptblock {powershell.exe -file '\ps\bcpCopy.ps1'} -ArgumentList $ARGS
Run Code Online (Sandbox Code Playgroud)
不幸的是,被调用的脚本没有收到参数:调用者打印数组,看起来很好:
参数数组:
-CFG …
我有一个IEnumerable对象(IEnumerable<Class>),我想从对象中检索指定的行.因此,如果我在第二页,我想从IEnumerable对象中选择第二行,然后将其传递给另一个类等.
我现在有点陷入困境,有什么想法吗?
我正在使用WPF框架3.5开发桌面项目.
这个应用程序有很多屏幕,但所有这些都是使用单个用户控件(基本上是一个包含在类中的堆栈面板和一些额外的逻辑)呈现的,我所做的就是根据用户选择推送和弹出屏幕.
现在,所有屏幕(基本上都是堆栈面板)都保留在一个xaml文件中,这个文件变得非常大,而且维护和更新变得非常困难.
所以我想也许我可以为应用程序上的每个屏幕创建用户控件,这会破坏xaml文件,使其更容易使用,但我不确定这是最好的方法还是推荐的方法,那是为什么我想知道其他人如何处理这个问题.
谢谢!
我目前想知道如何对链式命令进行错误处理.以下只是一个简单演示我的问题的例子:
cat file | gzip >/tmp/test
Run Code Online (Sandbox Code Playgroud)
如果cat失败(因为例如文件丢失),gzip仍然执行,因此最后存储的退出代码在$?是0.在这种情况下,set -e也无济于事.
我想知道什么是最好的解决方案?
谢谢!
只是想确保这是调用连接,从数据库中获取数据的最佳方法,还是应该如何在using语句之外调用datareader?(为了更快地关闭连接?)或者你有什么个人改变吗?
using (SqlConnection cn = new SqlConnection(connStr))
{
using (SqlCommand cm = new SqlCommand(connStr, cn))
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "GetExchRatesByDate";
cm.Parameters.Add("@Date", SqlDbType.VarChar).Value = txtStartDate.Text;
cn.Open();
SqlDataReader dr = cm.ExecuteReader();
while (dr.Read())
{
firstName = (string)dr["GivenName"];
lastName = (string)dr["sn"];;
}
dr.Close();
}
}
Run Code Online (Sandbox Code Playgroud) asp.net ×2
sql ×2
android ×1
arguments ×1
bash ×1
c# ×1
delphi ×1
delphi-2010 ×1
haskell ×1
ienumerable ×1
java ×1
jobs ×1
large-files ×1
linux ×1
monads ×1
parameters ×1
pointers ×1
powershell ×1
string ×1
theory ×1
types ×1
using ×1
utf-8 ×1
wpf ×1
xaml ×1