小编8bi*_*ree的帖子

为什么这个长溢出为-1,而不是类型的最小值?

我有以下代码,当完整的二进制树是layer图层高时,它返回树中的节点数:

public static long nNodesUpToLayer(int layer) {
        if (layer < 0) throw new IllegalArgumentException(
            "The layer number must be positive: " + layer );

        //At layer 0, there must be 1 node; the root.
        if (layer == 0) return 1;

        //Else, there will be 1 + 2 * (the number of nodes in the previous layer) nodes.
        return 1 + (2 * nNodesUpToLayer(layer - 1));
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我输入63函数(产生这个的最小值)时,它会让我回来-1.在62,它回馈9223372036854775807,所以这似乎是由溢出引起的.

它不应该让我回到Java长期的最小值+它溢出的数量吗?无论我给它(通过62)的输入如何,它总是会返回-1 …

java integer integer-overflow biginteger

28
推荐指数
3
解决办法
195
查看次数

为什么在运行时将空格插入此批处理文件?

我有这个简单的测试脚本:

echo start
falsey ^
&& echo nope
echo end
Run Code Online (Sandbox Code Playgroud)

falsey是一个微小的C程序,我帮助测试,它只是返回1:

int main(int argc, const char** argv) {
        return 1;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我打开cmd并运行这个批处理脚本时,它会在两个&s 之间插入几个空格,这自然会导致它错误地回显nope:

C:\jenkins-foo-test>foo.bat
C:\jenkins-foo-test>echo start
start
C:\jenkins-foo-test>falsey &  & echo nope
nope
C:\jenkins-foo-test>echo end
end
Run Code Online (Sandbox Code Playgroud)

我已经找到了一些解决方法,例如在以下位置引用引号&&:

falsey ^
"&&" echo nope
Run Code Online (Sandbox Code Playgroud)

在这种情况下,行情实际上并不起作用,请参阅@ dbenham的答案.

放弃^并合并两条线:

falsey && echo nope
Run Code Online (Sandbox Code Playgroud)

或者在前面添加一个空格&&:

falsey ^
 && echo nope
Run Code Online (Sandbox Code Playgroud)

这三个选项中的每一个都无法正确打印nope.但是当cmd.exe打印出正在运行的命令时,它们仍然会有额外的空格.

那么为什么要插入这些额外的空间?如何阻止cmd.exe破坏事物而不必一直将我的代码扭曲成温和不自然的形状?

cmd batch-file

9
推荐指数
1
解决办法
162
查看次数

如何使用Jenkins的Unix行结尾检查Windows中的CVS存储库?

我有一个在Windows上运行的Jenkins实例和一个项目,我需要从CVS存储库中检出.事实上,Jenkins的内置CVS插件正在使用Windows CRLF行结尾进行检查.但是,需要完成的一些操作要求文件具有Unix样式LF行结尾.

dos2unix在整个存储库中运行类似的实用程序似乎很安全可靠.

我可以通过运行shell脚本构建步骤来使用Cygwin的cvs,但我更喜欢与Jenkins更好地集成的东西.

因此,如果没有编写脚本来调用外部CVS,或者之后修复它dos2unix,Jenkins可以在Windows上查看带有Unix行结尾的CVS存储库吗?

编辑:

我已经遇到过这个错误报告,表明这个问题自2012年以来就已为人所知,并且没有做太多的事情.如果有人确实知道我已经提到过的替代方案,我会将问题保持开放.

windows cvs line-endings jenkins

5
推荐指数
1
解决办法
439
查看次数

使用 serde 序列化结构时如何展平“Vec”字段?

我有一些 XML,它的标签包含多个同名的同级标签,如下所示:

<foo>
    <bar/>
    <bar/>
</foo>
Run Code Online (Sandbox Code Playgroud)

(也可能有多个顶级<foo>,尽管我还没有抽出时间尝试(反)序列化它。)

使用此代码:

<foo>
    <bar/>
    <bar/>
</foo>
Run Code Online (Sandbox Code Playgroud)

并且不要忘记激活序列化功能:

[dependencies.quick-xml]
version = "0.18.1"
features = ["serialize"]
Run Code Online (Sandbox Code Playgroud)

我可以很好地反序列化,但是序列化添加了一个额外的<bar>标签作为bars包装实际<bar>标签的字段:

<Foo>
    <bar>
        <bar></bar>
        <bar></bar>
    </bar>
</Foo>
Run Code Online (Sandbox Code Playgroud)

#[serde(rename = "bar", default)]在现场,bars我第一次尝试根据fast-xml 的文档来解决这个问题,但它显然不起作用。我还查看了 serde 的文档,确实找到了一个flatten属性,但当我尝试将其应用到该领域时,它似乎不起作用bars

除了手动实现之外,有什么方法可以获得我需要的序列化吗Deserialize

如果相关的话,我尝试使用的实际数据格式是flam3 文件格式这里有一个示例文件。该<flame>元素相当于<foo>此处,并且<xform>相当于<bar>

xml rust serde

5
推荐指数
1
解决办法
1686
查看次数

Git:在未跟踪的构建目录中使用Makefile

我正在编写一个C++应用程序,它在source目录中有源文件,其中有一个build目录.该build目录包含Makefile,所以当我构建程序时,我从构建目录中这样做.

我想git忽略该build目录,因为它不包含源文件.但是,我确实希望git能够跟踪Makefile.跟踪Makefile但忽略其他构建文件的最佳做法是什么?我应该使用其他目录结构吗?

谢谢!

git makefile

3
推荐指数
1
解决办法
170
查看次数

c:当使用指针作为函数的输入时,通过使用*pointer ++递增指针值不起作用

当我学习C(我是新手)时,我正在玩指针.在这里你可以看到我的代码:

#include <stdio.h>

void change(int *i)
{
    *i += 1;  
}

int main()
{   
    int num = 3;

    printf("%d\n", num);
    change(&num);
    printf("%d\n", num);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的目标是替换递增num值而不重新分配它:

num = change(num);
Run Code Online (Sandbox Code Playgroud)

这就是为什么我是路过的内存位置num使用&:所以它可以作为一个指针.在此版本之前,代码中的所有内容都是相同的.唯一不同的是我说*i++;而不是说*i += 1;

现在我的问题是为什么我不能说*i++

c pointers operators operator-precedence

3
推荐指数
1
解决办法
104
查看次数

ckan创建新的用户问题

我最近从源安装了ckan.安装后,当我尝试通过以下命令创建一个新的管理员用户时:

paster sysadmin add seanh -c /etc/ckan/default/production.ini
Run Code Online (Sandbox Code Playgroud)

我在终端看到了这个:

User "seanh" not found
Create new user: seanh? [y/n]y
Need name and email of the user.
Run Code Online (Sandbox Code Playgroud)

然后命令退出.基本上我不能在被问到时输入用户的姓名和电子邮件.如何在Ubuntu终端上的ckan上创建一个新的管理员用户?

sysadmin ckan

3
推荐指数
1
解决办法
1074
查看次数

无法在Java/Groovy中创建zip文件

我已尝试过多种方法在Java/Groovy中创建此zip文件.我尝试的前几种方法,来自各种博客/帖子,导致无法打开的损坏的zip文件.所以,我试过这个(下面)看起来相当有前途.sysouts报告传递给FileInputStream的有效文件路径.我不确定是否是传递给ZipOutputStream的FQ路径导致了问题.无论哪种方式,下面是代码,这导致创建小(188kb)zip文件(没有条目).有什么建议?

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

class FileZipper {

    public static void makeZip(Set fullyQualifiedFileNames, String zipFileName, String outDir) throws IOException, FileNotFoundException
    {
        // These are the files to include in the ZIP file
        Object[] filenames = fullyQualifiedFileNames.toArray();
        String fileSeparator =  (String) System.getProperties().get("file.separator");

        // Create a buffer for reading the files
        byte[] buf = new byte[1024];

        // Create the ZIP file
        String outFilename = outDir + fileSeparator +zipFileName;
        FileOutputStream fos = new …
Run Code Online (Sandbox Code Playgroud)

java io groovy zip zipfile

0
推荐指数
1
解决办法
2408
查看次数

如何删除本地分支并返回主站?

我使用创建了一个新的分支git checkout -b new_branch_name.

我还没有运行git add或者git commit尚未.
我想完全摆脱这个分支,包括任何新文件,然后切换回master.我该怎么做呢?

git

0
推荐指数
1
解决办法
1753
查看次数