小编ibr*_*rir的帖子

如果没有指针被解除引用,C是否检查指针是否超出范围?

我和一些人说过这个论点,即C出界指针会导致未定义的行为,即使它们没有被解除引用.例:

int a;
int *p = &a;
p = p - 1;
Run Code Online (Sandbox Code Playgroud)

这里的第三行将导致未定义的行为,即使p永远不会被解除引用(*p从未使用过).

在我看来,如果没有指针被使用,C会检查指针是否超出界限听起来有点不合逻辑(就像有人会检查街上的人,看看他们是否携带枪支以防他们进入他的房子.理想的做法是在人们即将进入房屋时对他们进行检查.我认为如果C检查,那么会发生很多运行时开销.

另外,如果C真的检查OOB指针那么为什么这不会导致UB:

int *p; // uninitialized thus pointing to a random adress
Run Code Online (Sandbox Code Playgroud)

在这种情况下,即使p指向OOB地址的机会很高,为什么也不会发生任何事情.

加:

int a;
int *p = &a;
p = p - 1;
Run Code Online (Sandbox Code Playgroud)

&a是1000. p评估第三行后的价值是:

  • 996但仍未定义的行为,因为p可能在其他地方取消引用并导致真正的问题.
  • 未定义的值,这是未定义的行为.

因为我认为"第三行被称为未定义的行为"首先是因为未来可能会使用该OOB指针(解除引用),随着时间的推移,人们将其视为一种未定义的行为.现在,值p是100%996还是未定义的行为或其值将是未定义的?

c pointers language-lawyer

40
推荐指数
4
解决办法
5866
查看次数

如何导出从异步函数中获取其值的变量

如果我的问题听起来很愚蠢,我深表歉意,但我发现在许多情况下我需要在许多文件中使用全局变量,例如代表数据库和 redis 客户端的变量,但是这些变量本身需要等待从 promises 或 async 中获取它们的值初始化与数据库或 redis 服务器的通信的函数。

我想做这样的事情

init.js:

export default async () => {
   return await initializeWhatever()
}
Run Code Online (Sandbox Code Playgroud)

数据库.js:

import init from './init'
let db = null
init().then(val => db = val)
export default db
Run Code Online (Sandbox Code Playgroud)

api.js:

import db from './db'
const doApi = req => {
 db('users').select({username:req.param.username})
}
Run Code Online (Sandbox Code Playgroud)

但是db导入的变量api.js始终为空,为什么在init()完成时它没有更新为正确的值?如果我使用 db 的方法是错误的,那么导出异步计算的全局变量的正确方法是什么?

javascript export es6-modules

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

在 html 页面上显示命令行输出

我正在构建一个 Web 应用程序,它在终端上运行某些命令并将结果显示回 Web 应用程序。我能够使用 child_process.exec 运行命令并获取我面临的问题的结果,同时将其显示在 html 页面上。

我想要这样的东西: 在此处输入图片说明

有没有办法像这样显示命令行输出?任何线索都可以。谢谢你。

html javascript bash node.js

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

如何在javascript中对混合数字/字母数字数组进行排序

我有一个混合数组,我需要按数字,字母,然后按数字排序 -

['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3']
Run Code Online (Sandbox Code Playgroud)

我如何将其排序为:

['1', '2', 'A1', 'A2', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3']
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a, b) {
    var AInt = parseInt(a.Field, 10);
    var BInt = parseInt(b.Field, 10);

    if (isNaN(AInt) && isNaN(BInt)) {
        var aA = (a.Field).replace(reA, "");
        var bA = (b.Field).replace(reA, "");
        if (aA === bA) {
            var aN = parseInt((a.Field).replace(reN, ""), …
Run Code Online (Sandbox Code Playgroud)

javascript sorting jquery angularjs

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

Concat数组成一个数组(JS或Lodash)

输入:

var array1 = ["12346","12347\n12348","12349"];
Run Code Online (Sandbox Code Playgroud)

脚步:

替换\n','和添加到列表中.

输出:

var array2 = ["12346","12347","12348","12349"];
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的逻辑但没有达到输出.看起来有些东西不见了.

var array2 = [];

_.forEach(array1, function (item) {               
       var splitData = _.replace(item, /\s+/g, ',').split(',').join();
       array2.push(splitData);
});
Run Code Online (Sandbox Code Playgroud)

输出我的代码:

["12346","12347,12348","12349"]
Run Code Online (Sandbox Code Playgroud)

javascript lodash

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

Lodash:按布尔值排序对象数组?

我有一个我想订购的对象数组(本质上它是一个表格):

myArr = [{
    name: 'John',
    email: 'john@gmail.com',
    accepted: true
}, {
    name: 'Alfred',
    email: 'alfred@gmail.com',
    accepted: false
}]
Run Code Online (Sandbox Code Playgroud)

我正在使用 lodash 中的 orderBy,如下所示:

//get columnName to sort by from another function
const newArr = _.orderBy(myArr, [columnName], ['asc'])
Run Code Online (Sandbox Code Playgroud)

按姓名和电子邮件订购可以正常工作,因为接受它并没有做任何事情。我知道我可以将接受存储为 0 和 1,但是还有其他方法吗?lodash 是否足够,或者我应该为此创建一个单独的函数?

javascript lodash

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

循环索引变量的Javascript成为全局范围的一部分?

也许我不知道for循环索引变量是如何得到作用域的,但是当我的一个循环没有完成时我感到非常惊讶,似乎因为在循环内调用的函数也包含了一个ifor for循环索引.

这是我用一个小脚本来演示这种行为:

var loopOne = function(test) {
    for(i = 0; i < test.length; i++)
        console.log(getMask(test));
};

var getMask = function(pass) {      
    var s = "";
    for (i = 0; i < pass.length; i++) {
        s = s + "*";
    }
    return s;      
};

loopOne('hello');
Run Code Online (Sandbox Code Playgroud)

如果我在Chrome中运行它并查看控制台日志,我应该看到*****五次.但是,我只看过一次.经过进一步检查,如果我输入iChrome javascript控制台,它将输出6(= 'hello'.length + 1).这使我认为它i已成为全球范围的一部分,并不仅限于for需要它的循环范围.

它是否正确?如果是这样,for在javascript中定义循环的索引变量有什么更好的做法?

javascript scope

6
推荐指数
2
解决办法
5323
查看次数

PDO - 获取当前插入的ID

$query = "INSERT INTO news VALUES (NULL, :param1 , :param2  )";
$stmt = $pdo->prepare($query);

$params = array(
    "param1" => $p['title'],
    "param2" => $p['body'],
);

$data = $stmt->execute($params);

// here i would like get current inserted ID. Is possible?

$id = $data->id ???? ;
Run Code Online (Sandbox Code Playgroud)

//这里我想获得当前插入的ID.有可能吗?

$ id = $ data-> id ???? ;

我该怎么做?

php pdo

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

.bind(this)是通过引用还是通过值传递的?

我在某处创建了一个函数并将其绑定到this我可以使用父块的含义this作为this函数内的值.例如:

var foo = function() {
    // some stuff involving other stuff
}.bind(this);
Run Code Online (Sandbox Code Playgroud)

this我作为参数传递给bind按引用传递,或价值?因此,如果我this稍后在外部代码块中更改对象的参数,然后调用foo,将foo使用this我调用时的值bind,还是在我调用的时候foo

javascript binding this pass-by-reference pass-by-value

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

如何循环数组并将每次迭代写入同一个文件 [nodejs]

我有一个数据数组,我想循环遍历,并且在循环时我想将它们写入同一个文件。我如何才能实现相同的目标,我的以下代码将仅打印最后一次迭代。

for (j = 0; j < arrayPart.length; j++){
    fs.writeFileSync('message.txt', arrayPart[j])
}
Run Code Online (Sandbox Code Playgroud)

message.txt将具有最后的值arrayPart.

javascript for-loop node.js

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