具有文件输入的 C 内存分配



您好,我在内存分配方面有问题,

    1. 打开文件
    2.在里面留出文字的长度
    3. 以长度的大小制作缓冲区(数组[] ? malloc ?)
    4.对缓冲区中的文本进行操作。
    5. 关闭

当文本长度超过 1xx 个字符时,它就会终止,我不知道发生了什么。
注意!IM的学习和这段代码的质量可能很差

#include <stdio.h>
#include <stdlib.h>
void copy_to_buffer(FILE *fp, int length, char *buffer){
    for(int i = 0; i < length; i++){
        char c = fgetc(fp);
        buffer[i] = c;
    }
}
int length_of_text(FILE *fp) {
    fseek(fp, 0L, SEEK_END);
    int size = ftell(fp);
    rewind(fp);
    return size;
}
void char_counter(int length, char *buffer, int *charBuffer) {
    int counts[128] = { 0 };
    for (int i = 0; i < length; i++) {
        counts[(int)(buffer[i])]++;
        charBuffer[i] = counts[i];
    }
    for (int i = 0; i < 128; i++) {
        charBuffer[i] = counts[i];
        if(counts[i] != 0)
            printf("%d.(%c) counted: %d times.n", i,i, counts[i]);
    }
}
/***********************************MAIN***********************************/
int main(int argc, char** argv) {
    FILE *fp = fopen("tekst.txt" , "r");
    int length = length_of_text(fp);                //lenght of text
    char *buffer = malloc(sizeof(char)*length);     //buffer for text from file
    if(buffer == NULL) 
        printf("error");
    else
        printf("alocated at = %pn", &buffer);
    int charBuffer[128] = {0}; // charcount buffer
    buffer[length] = '';   // '' after last sign
    copy_to_buffer(fp, length, buffer); 
    char_counter(length, buffer, charBuffer); 
    free(buffer);
    fclose(fp);     
    return 0;
}

在这一行中

charBuffer[i] = counts[i];

当文件大小为>= 128 时,您将溢出charBuffer[128]因为i索引最多为文件的长度。

在你的char_counter函数中,你做

charBuffer[i] = counts[i];

在第一个 for 循环中,但缓冲区仅定义为 128 个整数。如果文本长度超过 128 个字符,这将导致缓冲区溢出和分段错误。

删除该行,让第二个 for 循环执行此操作。

相关内容

  • 没有找到相关文章

最新更新