小编Sen*_*eca的帖子

c复制带有从堆栈到堆的指针的结构

给出以下类型

typedef struct {
  const void *data;
  uint32_t offset[2];
} TSNode;
Run Code Online (Sandbox Code Playgroud)

我有一个功能包含一个assignement:

TSNode* myFun() {
    TSNode node = get_node();
    // rest of code
}
Run Code Online (Sandbox Code Playgroud)

由于node在这里分配了堆栈内存,一旦函数结束它就会消失.我想在以后的点跟踪该节点,所以我想把它复制到堆中.

TSNode* myFun() {
    TSNode node = get_node();

    TSNode* heapNode = malloc(sizeof(TSNode));
    memcpy(heapNode, &node, sizeof(TSNode));
    return heapNode;
}
Run Code Online (Sandbox Code Playgroud)

这是否将所有数据正确地存储到我的堆中heapNode?即在此过程中没有任何损坏*data并且完好无损?

c heap-memory

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

OCaml类型不能一概而论

我有以下代码:

type 'v state = {
  visited: string list;
  unvisited: string list;
  value: 'v;}

type ('a,'b) parser =
  | Parser of ('a state -> 'b state list)

type 'a result =
  | Ok of 'a
  | Err

let parseString x = Ok x
let parseInt x = Ok (int_of_string x)
let custom = fun stringToSomething  ->
    Parser (fun { visited; unvisited; value }  ->
            match unvisited with
            | [] -> []
            | next::rest ->
                 (match stringToSomething next with
                  | Ok …
Run Code Online (Sandbox Code Playgroud)

ocaml

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

如何获取所有可用的环境变量?

OCaml中是否可以检索所有可用的环境变量?

OCaml stdlib在Sys模块中提供以下内容:

val getenv : string -> string
Run Code Online (Sandbox Code Playgroud)

但是它仅显示env var是否可用。有没有办法列出环境中的所有变量?

ocaml environment-variables

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

Javascript获取JSON数组

我正在尝试通过ajax获取json数组.我的test.php返回:

[{"name":"James","age":24},{"name":"Peter","age":30}]
Run Code Online (Sandbox Code Playgroud)

我的Javascript看起来像这样:

var persons=new Array();
$.getJSON("../../api/test.php", function(data){
        $.each(data, function(index,value){
                    persons.push(new Person(value.name,value.age));
                });
    });
Run Code Online (Sandbox Code Playgroud)

问题是当我后来调用persons.length,我得到无法读取未定义的属性'长度'.当我将test.php的输出从浏览器复制/粘贴到局部变量时,一切正常:

var content=[{"name":"James","age":24},{"name":"Peter","age":30}];
for(var i=0; i<content.length; i++)
    persons.push(new Person(content[i].name,content[i].age));
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

javascript arrays ajax jquery json

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

在SQL中计算下一个字母

基本上,表有一个header-column和一个sequence-column.序列由'aa','ab','ac'等组成.

我正在尝试创建一个给出标题输入的函数,它给出了下一个可能的序列.例如,如果以'a'开头的最后一个序列以'd'(序列'ad')结尾,则它给出'ae'.首先,我选择当前的"最高"序列(MAX),然后更新第二个字母

我的代码:

    ALTER FUNCTION [dbo].[fctCalculateNextSeqCode]
(
    -- Add the parameters for the function here
    @Input nvarchar(50)
)
RETURNS nvarchar
AS
BEGIN

    DECLARE @NewSeq nvarchar(50)
    DECLARE @OldSeq nvarchar(50)

    SET @OldSeq = (select Max(SMTRPD_Sequence) from dbo.TbOrgSM_Transactions_PriceLines_Definition where SMTRPD_Header2 = @Input)

    --first character remains, second character is next in alphabet
    select @NewSeq = LEFT(@OldSeq,1) + CHAR(ASCII(RIGHT(@OldSeq,1))+1);

    -- Return the result of the function
    RETURN @NewSeq

END
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该函数时,它只返回序列的第一个字符,而不是第二个字符.我究竟做错了什么?

sql sql-server

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

Ocaml表现vs去

我正在尝试在Ocaml中实现utf8解码作为学习项目.为了检查性能,我正在针对go标准库进行基准测试.

这是go代码:

package main

import (
    "fmt"
    "time"
    "unicode/utf8"
)

func main() {
    start := time.Now()

    for i := 0; i < 1000000000; i++ {
        utf8.ValidRune(23450)
    }

    elapsed := time.Since(start)
    fmt.Println(elapsed)
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

go build b.go
./b
344.979492ms
Run Code Online (Sandbox Code Playgroud)

我决定在ocaml中写一个等价物:

let min = 0x0000
let max = 0x10FFFF

let surrogateMin = 0xD800
let surrogateMax = 0xDFFF

let validUchar c =
  if (0 <= c && c < surrogateMin) then
    true
  else if (surrogateMax < c && c <= max) then
    true …
Run Code Online (Sandbox Code Playgroud)

performance ocaml go

0
推荐指数
2
解决办法
1813
查看次数