그래서 줄 단위로 텍스트 파일을 읽고 각 줄을 char 배열로 저장하려고합니다.strncpy 문자 배열에 줄 단위로 파일 복사
루프의 인쇄물에서 라인 당 줄 수와 문자 수를 올바르게 계산할 수 있지만 strncpy
과 관련된 문제가 있습니다. 데이터 배열을 인쇄하려고하면 2 개의 이상한 문자 만 표시됩니다. 나는 strncpy
으로 일한 적이 없으므로 내 문제가 null-termination과 관련이 있다고 느낍니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE *f = fopen("/home/tgarvin/yes", "rb");
fseek(f, 0, SEEK_END);
long pos = ftell(f);
fseek(f, 0, SEEK_SET);
char *bytes = malloc(pos); fread(bytes, pos, 1, f);
int i = 0;
int counter = 0;
char* data[counter];
int length;
int len=strlen(data);
int start = 0;
int end = 0;
for(; i<pos; i++)
{
if(*(bytes+i)=='\n'){
end = i;
length=end-start;
data[counter]=(char*)malloc(sizeof(char)*(length)+1);
strncpy(data[counter], bytes+start, length);
printf("%d\n", counter);
printf("%d\n", length);
start=end+1;
counter=counter+1;
}
}
printf("%s\n", data);
return 0;
}
텍스트 파일의 형식은 무엇입니까? ASCII 또는 유니 코드 (UTF-8 또는 UTF-16)입니까? 또한 코드로 표시하고 더 읽기 쉽도록 코드를 다시 포맷 할 수 있습니까? 예를 들어 명령문 당 한 줄 씩. 감사합니다. – ChrisBD
코드를 다시 포맷했지만 for 문은 여러 가지 편집 과정에서 어떻게 든 훼손되었습니다. 이 코드가 실제로 사용중인 코드인지 확인하십시오. –
나는 당신의 문제에 대한 해결책이 무엇인지 모르겠다. 비슷한 문제가있다. 그러나 나는 약간의 팁을 줄 것이라고 생각했다. 메모리를 직접 mallocing하는 대신 strdup를 사용할 수 있어야한다. strncopy. strdup는 malloc을 사용하여 메모리를 할당하고 복사 프로세스를 처리합니다. 단 한 줄을 저장하지만, 나는 내장 된 기능에 대한 큰 팬이다. – Chris