小编Cal*_*Lau的帖子

使用JavaScript [] literal的数组长度是否真的反映了它在内存中的物理大小?

在JavaScript中,有两种方法可以定义数组:

var array = new Array(); // which is not preferred
Run Code Online (Sandbox Code Playgroud)

var array = [];
Run Code Online (Sandbox Code Playgroud)

[编辑纠正误解]事实上,无论我使用[]还是新的Array(),它们总是对象,因为我们可以定义

var object = [];
object["key"] = "value";
console.log(object.key); // gives "value"
Run Code Online (Sandbox Code Playgroud)

我想知道如果使用[]定义一个"数组",如果我有以下代码,那么物理大小是多少:

var array = [];
array[1000] = "value";
Run Code Online (Sandbox Code Playgroud)

如果它的行为类似于一个对象,它的物理大小应该只由键值对[1000] - >"value"组成.但是,如果我使用输出数组的长度属性console.log(array.length);,它给出1001好像在我刚刚插入的[1000] - >"值"之前有1000个元素.

那么使用[]定义的"数组"的内存中的物理大小应该是多少?

javascript arrays object

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

在C中获取文件大小的正确方法

我正在进行socket编程中的一项任务,我必须在sparc和linux机器之间发送一个文件.在char流中发送文件之前,我必须获取文件大小并告诉客户端.以下是我试图获得尺寸的一些方法,但我不确定哪一个是正确的.

出于测试目的,我创建了一个内容为"test"的文件(空格+(字符串)测试)

方法1 - 使用fseeko()和ftello()

这是我在https://www.securecoding.cert.org/confluence/display/c/FIO19-C.+Do+not+use+fseek()+and+ftell()+to+compute+上找到的方法.+大小+ + a +常规+文件 虽然fssek()有一个问题"将文件位置指示器设置为文件结尾,与fseek(文件,0,SEEK_END)一样,但是对于二进制文件有未定义的行为stream",fseeko()据说解决了这个问题,但它只适用于POSIX系统(这很好,因为我使用的环境是sparc和linux)

fd = open(file_path, O_RDONLY);
fp = fopen(file_path, "rb");
/* Ensure that the file is a regular file */
if ((fstat(fd, &st) != 0) || (!S_ISREG(st.st_mode))) {
  /* Handle error */
}
if (fseeko(fp, 0 , SEEK_END) != 0) {
  /* Handle error */
}
file_size = ftello(fp);
fseeko(fp, 0, SEEK_SET);
printf("file size %zu\n", file_size);
Run Code Online (Sandbox Code Playgroud)

此方法工作正常,并正确获得大小.但是,它仅限于常规文件.我试图谷歌术语"常规文件"但我仍然不太了解它.我不知道这个功能对我的项目是否可靠.

方法2 - 使用strlen()

自从最大 我的项目中的文件大小是4MB,所以我可以只调用一个4MB的缓冲区.之后,文件被读入缓冲区,我尝试使用strlen来获取文件大小(或更正确的内容长度).由于strlen()是可移植的,我可以使用这种方法吗?代码片段是这样的

fp = fopen(file_path, "rb");
fread(file_buffer, 1024*1024*4, 1, …
Run Code Online (Sandbox Code Playgroud)

c sockets linux filesize

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

试图释放C中的字符数组数组会导致双重释放或损坏

我正在开发一个项目,我必须在其中创建一个字符串数组(char*),但是,当我尝试释放数组数组时,会给出"double free or corruption",我无法弄清楚问题.

这里的代码提取是一个简化版本,它可能看起来毫无意义,但它说明了我面临的问题:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char **cptr;
    int i;

    cptr = malloc(256*sizeof(char));
    for (i=0; i<256; i++) {
        cptr[i] = calloc(2, sizeof(char));
        cptr[i][0] = (char)i;
    }
    for (i=0; i<256; i++) {
        free(cptr[i]);
    }
    free(cptr);

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

谢谢.

c arrays pointers char

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

标签 统计

arrays ×2

c ×2

char ×1

filesize ×1

javascript ×1

linux ×1

object ×1

pointers ×1

sockets ×1