您好,我在内存分配方面有问题,
- 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 循环执行此操作。