使用文件输入进行C内存分配

没有任何问题

您好,我在内存分配方面遇到了问题,

    1.打开文件
    2.取长篇幅的文字
    3.使缓冲区的长度最大(array []?malloc?)
    4.对缓冲区中的文本进行操作。
    5.关闭

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

#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 = %p\n", &buffer);

    int charBuffer[128] = {0}; // charcount buffer
    buffer[length] = '\0';   // '\0' after last sign
    copy_to_buffer(fp, length, buffer); 
    char_counter(length, buffer, charBuffer); 

    free(buffer);
    fclose(fp);     
    return 0;
}
弗雷德里克

在你的char_counter职能上

charBuffer[i] = counts[i];

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

删除该行,然后让第二个for循环执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件分配内存,然后使用fread和fwrite C

来自分类Dev

尝试从c中的文件以单词(文本)进行动态内存分配

来自分类Dev

使用C进行实验-为什么我不能分配和使用2GB的内存?

来自分类Dev

C语言中的用户输入和动态内存分配

来自分类Dev

使用“ new”的c ++动态内存分配

来自分类Dev

使用realloc的C struct内存分配

来自分类Dev

使用realloc的C struct内存分配

来自分类Dev

使用scanf()进行内存分配和表读取

来自分类Dev

C ++“新”内存分配

来自分类Dev

内存分配-Java与C ++

来自分类Dev

C:内存分配问题

来自分类Dev

C内存分配(malloc)

来自分类Dev

最佳内存分配C ++

来自分类Dev

Java与C ++内存分配

来自分类Dev

分配内存(C)

来自分类Dev

仅在使用调试标志进行编译时,“虚拟内存耗尽:无法分配内存”

来自分类Dev

c中的动态内存分配,释放使用malloc()之前分配的部分内存

来自分类Dev

使用输入文件OS X进行调试

来自分类Dev

如何使用C ++ new代替C malloc分配内存

来自分类Dev

C / C ++-使用mmap的内存映射文件

来自分类Dev

使用pyqt输入.c文件的输入

来自分类Dev

在读取文件的情况下进行动态内存分配

来自分类Dev

在C#中使用foreach循环时的内存分配

来自分类Dev

在C中使用字符指针为结构分配内存

来自分类Dev

如何使用动态内存分配处理C中的矩阵?

来自分类Dev

在C#中使用foreach循环时的内存分配

来自分类Dev

什么时候在C程序中分配和使用内存?

来自分类Dev

使用malloc在C中动态分配内存

来自分类Dev

如何在C中使用重定向进行文件输入