小编dla*_*tte的帖子

c ++中的2d布尔数组初始化

我没有那么多使用C,最近我对2d数组初始化问题感到困惑.我需要调试某人的代码并坚持以下(她的原始代码):

const int location_num = 10000;
bool **location_matrix;
if (node_locations)
    {
        location_matrix = (bool **)malloc(location_num*sizeof(bool *));
        if (!location_matrix)
        {
                cout<<"error 1 allocating location_matrix" << endl;
                exit;
        }
        for (i=0; i<location_num; i++)
        {
                location_matrix[i] = (bool *) malloc(location_num*sizeof(bool ));
                if (!location_matrix[i])
                {
                        cout<<"error 2 allocating location_matrix" << endl;
                        exit;
                }
                for (j=0; j<location_num; j++)
                        location_matrix[i][j] = false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我认为是多余的,所以我将其更改为以下内容:

location_matrix[location_num][location_num] = { {false} };

但是,分段错误在运行时发生.我的问题是:上面的代码是如何失败的?如果它看起来正确,动态分配和静态分配之间有什么区别?是因为维度可能不是常数,所以我们需要动态地做这个吗?另外,只是为了好奇,我如何malloc 2d数组存储指针?谢谢.

c++ initialization multidimensional-array

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

如何在Backbone.js/underscore.js中的比较器中实现多级排序?

想象一个模型/集合,如:

var AModel = Backbone.Model.extend({
    defaults: {
        a: 'a string',
        b: 'another string',
        c: 'yet another string'
    }
});

var ACollection = Backbone.Collection.extend({
    model: AModel,
    comparator: function(amodel) {
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

我怎么能写一个比较器来实现多级排序?我想作为排序依据AModela属性,然后通过它的b属性,然后通过它的c属性.

我已经把一个比较器看起来像这样,但我想知道是否有更好/更聪明的方法?

comparator: function(amodel) {
    var s = '',
        assumed_max_length_of_any_attribute = 30;

    s += amodel.get('a');
    while (s.length < assumed_max_length_of_any_attribute) {
        s += ' ';
    }

    s += amodel.get('b');
    while (s.length < assumed_max_length_of_any_attribute) {
        s += ' ';
    }

    s += amodel.get('c'); …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js underscore.js

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

程序究竟如何在内部将所有内容转换为UTF-8?

  • 它使用setlocale()吗?
  • 对于UTF-8语言环境中的所有输入字符串,它是否假设utf-8?
  • 我理解unicode是什么以及它与utf-8有什么关系,但是如何在内部用它们的所有字符串"转换为它"呢?

它如何将所有输入字符串转换为UTF-8?它是否使用C库函数?

当前工作区域设置是否必须是UTF-8语言环境?

更新:如果具体的技术细节可以在你的答案中,那将是伟大的,因为这更符合我正在寻找的.我已经理解了在内部使用UTF-8的原因以及为什么它使得处理多个语言环境变得更加简单.

更新:提到简单地使用iconv和/或ICU的答案,但是,如何strcmp()与其他所有例程一起知道将它们作为UTF-8进行比较呢?是否setlocale()必须运行?或者没关系?

c internationalization

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

在C中正确处理平台细节(unix/windows)?

这个问题是故意非常通用的,虽然我在这里和那里涉猎,但我并不是一个C程序员.以下代码故意模糊,可能无法编译,但我希望你明白......

处理平台细节似乎是动态的,像C这样的编译语言似乎是不必要甚至可怕的:

int main(int argc, char *argv[]) {
    if (windows)
        dowindowsroutine();
    else
        dounixroutine();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,通过非常基本的宏来处理平台细节似乎也很粗糙,因为函数被切割成可能无法正确编译的小块(读取C#define宏的答案以用于类似问题的调试打印).

int main(int argc, char *argv[]) {
    #ifdef windows
    dowindowsroutine();
    #else
    dounixroutine();
    #endif
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么这样做的"正确"方法是什么?这是个案的基础吗?有没有一种很好的方法可以完全保留这些粗糙的宏?我记得在某处(可能在内核文档或相关内容中)读取宏(更重要的是,复杂的宏逻辑)是针对头文件而不是.c文件.你怎么处理这种东西?

我厌倦了ifdef在函数内部的"意大利面条代码"...我觉得有些情况可能没问题,但我看到的大多数代码都滥用它.

注意:我已经看到一些perl XS代码看起来像包装函数原型和东西,但这是唯一的方法吗?在社区中有点不公平吗?或者那样好吗?来自perl,python,shell等主要是"脚本化"的背景......我很难说.

更新:让我更清楚一点,我试图避免的问题是我不想要乱码.我希望能够确保如果我的代码在linux的编译时断开,它也会在编译时在windows中中断.使用不稳定的代码,它可以打破编译窗口,但不是Linux,反之亦然.这种事可能吗?到目前为止最接近这一点的是ifdef整个函数,但是函数名是相同的,有一个更好的解决方案,有一个接口,但操作系统特定的部分有他们的操作系统名称嵌入名称?

c macros portability coding-style

2
推荐指数
1
解决办法
1080
查看次数

用户+系统时间是否等于实际/挂钟时间?

在Perl中:

my ($usr,$sys,$cusr,$csys) = times;
printf "real %s, user %s, sys %s\n", $usr + $sys, $usr, $sys;
Run Code Online (Sandbox Code Playgroud)

这是真的?我读了一些其他问题,其中人们做了一些事情,比如将当前时间保存在变量中并稍后收集它,但为什么这不起作用?

unix

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

浮点表示如何从perl中的十进制表示中取消1?

我在一些"humanize_bytes()"代码中遇到了一个有趣的问题.此循环表示没有所有其他逻辑的问题.当字节被截断为"人类可读"级别时,循环需要停止.它继续迭代,直到最终值小于1024(或可指定的字节大小).

当函数输出"1024.0 P"为1024 PB时,我开始研究这个问题.起初我以为我不小心使用了<= vs <,但经过进一步的检查,我发现更有趣的事情正在发生.

此代码重现了该问题.我正在使用perl 5.8.8.

use strict;

my $bytesize = 1024;
my $final = 1152921504606846720;
while (1) {
    printf "bytesize %%d: %d %%f: %s %s final %%d: %19d %%f: %26f\n",
        $bytesize,$bytesize,
        (
            $bytesize == $final ? '==' :
            $bytesize > $final  ? '>'  :
            $bytesize < $final  ? '<'  :
            '<error>'
        ),
        $final,$final;
    last if $final < $bytesize;
    $final /= $bytesize;
}
printf "final = bytesize d:%d f:%s %s final d:%d f:%f\n",
    $bytesize,$bytesize,
    (
        $bytesize == $final …
Run Code Online (Sandbox Code Playgroud)

floating-point perl decimal

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

perl中的套接字编程,perlio层的问题?

我注意到perl中perlio层的一些问题.给我一个美好的一天来追踪它,并希望其他人知道这件事吗?最可怕的是,由于它的级别太低,我担心它会降低代码的可移植性.

服务器代码:

use strict;
use Socket;

socket(my $sock, AF_INET, SOCK_STREAM, getprotobyname('tcp')) or die();
setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, 1) or die();
bind($sock, pack_sockaddr_in(23457, inet_aton('0.0.0.0'))) or die();
listen($sock, 10) or die();

my $paddr = accept(my $csock, $sock);
if (not $paddr) { 
    die();
}
my ($port, $iaddr) = unpack_sockaddr_in($paddr);
printf "accepted %s:%s\n", inet_ntoa($iaddr), $port;
send($csock, "1234567890", 0);
recv($csock, my $tmp, 8192, 0);
close($csock);
close($sock);
Run Code Online (Sandbox Code Playgroud)

客户端代码(我稍微改变以测试):

use strict;
use Socket;
use PerlIO;

socket(my $sock, AF_INET, SOCK_STREAM, getprotobyname('tcp')) or die();
connect($sock, pack_sockaddr_in(23457, inet_aton('localhost'))) or die();
print …
Run Code Online (Sandbox Code Playgroud)

sockets perl select

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