C函数将数组分成 block

标签 c arrays function pointers

我有一个名为 contentbytes 数组,又名 unsigned char。我想在一个单独的函数中将我的 content 数组拆分为 2 个新数组。此函数还应确定 2 个 block 中每个 block 的大小并为它们分配内存。此外,我希望能够在函数之外使用新数组及其大小。我的实现出现了 segmentation fault,我一定是用错误的指针做了一些事情。

主要功能

int main(int argc, char *argv[]) {

    byte *content = NULL;
    size_t size_content;

    byte *param = NULL;
    size_t size_param;

    byte *data = NULL;
    size_t size_data;

    // This works fine!
    size_content = load_file_to_memory(argv[1], "rb", &content);

    // split content
    split_content(content, &param, &data,
            size_content, &size_param, &size_data);

    // SEGMENTATION ERROR
    putchar(param[0]);

    return 0;
}

拆分内容功能:

    void split_content(byte *content, byte **param, byte **data,
            size_t size_content, size_t *size_param, size_t *size_data) {
    *size_param = get_number_of_param_bytes(content);
    *size_data = size_content - *size_param;

    *param = malloc((*size_param) * sizeof(byte));
    *data = malloc ((*size_data) * sizeof(byte));

    for(size_t i=0; i<*size_param; i++) {
        *param[i] = content[i];
    }

    for(size_t i=*size_param; i<size_content; i++) {
        *data[i-*size_param] = content[i];
    }
}

获取参数字节数函数:

    size_t get_number_of_param_bytes(byte *content) {
    size_t num_whites = 0;
    size_t byte_index = 0;
    do {
        byte b = content[byte_index];
        if(isspace(b)) {
            num_whites += 1;
        }
        byte_index += 1;
    } while (num_whites < N_WS);
    return byte_index;
}

加载文件到内存:

    size_t load_file_to_memory(const char *filename, const char *mode, byte **buffer) {
    size_t size = 0;

    FILE *file = fopen(filename, mode);
    if (file == NULL) {
        *buffer = NULL;
        printf("Unable to open file! Terminating...\n");
        exit(-1);
    }

    size = get_file_size(file);
    *buffer = malloc(size * sizeof(byte));

    if (fread(*buffer, sizeof(byte), size, file) != size) {
        printf("Error loading file into memory! Terminating...\n");
        free(*buffer);
        exit(-1);
    }

    fclose(file);
    return size;
}

一定是我在这里做错了指针。

最佳答案

由于优先规则,*param[i] 表示 *(param[i]),但您实际上想要 (*param)[i]

同样,*data[i-*size_param] 表示 *(data[i-*size_param]) 但您需要 (*data)[i -*size_param].

*param*data 周围添加额外的括号。

关于C函数将数组分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534660/

相关文章:

c - secret 服务器协议(protocol)保持软件免费

python - 将字符串与字符序列进行比较

c - 将姓名和号码插入链表末尾

c - 从线性列表中删除记录的问题 (C)

php - 返回 PHP 数组名

python - 为什么我可以在函数中使用变量之前在 Python 中定义它?

c - 如何将字符串文件读入链表? (C)

c - 这个使用指针函数的C程序有什么问题

在c中将24bpp bmp彩色图像转换为8bpp灰度bmp图像

arrays - 是否有任何理由按第一项传递数组?