我和一些人说过这个论点,即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评估第三行后的价值是:
p可能在其他地方取消引用并导致真正的问题.因为我认为"第三行被称为未定义的行为"首先是因为未来可能会使用该OOB指针(解除引用),随着时间的推移,人们将其视为一种未定义的行为.现在,值p是100%996还是未定义的行为或其值将是未定义的?
如果我的问题听起来很愚蠢,我深表歉意,但我发现在许多情况下我需要在许多文件中使用全局变量,例如代表数据库和 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 的方法是错误的,那么导出异步计算的全局变量的正确方法是什么?
我正在构建一个 Web 应用程序,它在终端上运行某些命令并将结果显示回 Web 应用程序。我能够使用 child_process.exec 运行命令并获取我面临的问题的结果,同时将其显示在 html 页面上。
有没有办法像这样显示命令行输出?任何线索都可以。谢谢你。
我有一个混合数组,我需要按数字,字母,然后按数字排序 -
['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) 输入:
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) 我有一个我想订购的对象数组(本质上它是一个表格):
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 是否足够,或者我应该为此创建一个单独的函数?
也许我不知道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中定义循环的索引变量有什么更好的做法?
$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 ???? ;
我该怎么做?
我在某处创建了一个函数并将其绑定到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?
我有一个数据数组,我想循环遍历,并且在循环时我想将它们写入同一个文件。我如何才能实现相同的目标,我的以下代码将仅打印最后一次迭代。
for (j = 0; j < arrayPart.length; j++){
fs.writeFileSync('message.txt', arrayPart[j])
}
Run Code Online (Sandbox Code Playgroud)
message.txt将具有最后的值arrayPart.