-1
mytab2411.txt (크기가 15,017,210 바이트) 및 shadow.txt (크기가 569 바이트) 인 동일한 파일을 비교하고 싶지만이 코드를 컴파일하고 프로그램을 실행하면 세분화 오류. 나는 "mytab2411.txt"파일이 "char buf"의 크기를 초과했기 때문에 그것이 버퍼 오버 플로우없이이 문제를 해결할 수 있다는 것을 알고있다.파일 크기가 버퍼 크기를 초과합니다.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
int cmp(const void * s1, const void * s2)
{
return strcasecmp(*(char **)s1, *(char **)s2);
}
int cmp_half(const char * s1, const char * s2)
{
int i;
for (i = 0; i < 3; i++)
{
int res = strncasecmp((char *)s1+i*3, (char *)s2+i*3, 2);
if (res != 0) return res;
}
return 0;
}
char * line[1024];
int n = 0;
int search(const char * s)
{
int first, last, middle;
first = 0;
last = n - 1;
middle = (first+last)/2;
while(first <= last)
{
int res = cmp_half(s, line[middle]);
if (res == 0) return middle;
if (res > 0)
first = middle + 1;
else
last = middle - 1;
middle = (first + last)/2;
}
return -1;
}
int main()
{
FILE * f1, * f2;
char * s;
char buf[1024*1024], text[1024];
f1 = fopen("shadow.txt", "rt");
f2 = fopen("mytab2411.txt", "rt");
s = buf;
while (fgets(s, 1024, f2) != NULL)
{
line[n] = s;
s = s+strlen(s)+1;
n++;
}
qsort(line, n, sizeof(char *), cmp);
while (fgets(text, 1024, f1) != NULL)
{
text[strlen(text)-1] = 0;
int idx = search(text);
if (idx >= 0)
{
printf("%s matched %s\n", text, line[idx]);
}
else
{
printf("%s not matched\n", text);
}
}
return 0;
}
덩어리로 읽으시겠습니까? 메모리 맵 파일? 동적으로 메모리를 할당 하시겠습니까? 수행해야 할 작업은 유스 케이스, 요구 사항 및 해결하려는 문제에 따라 달라집니다. –
이 코드는'[C++]'처럼 보이지 않습니다. 어떤 솔루션을 원하십니까? 언어에 따라 매우 다를 것입니다. – Lanting
사과, 실수로 C++로 태그를 지정했습니다. 동적 메모리 할당이 선호됩니다. –