저는 현재 3 개의 인자, 2 개의 파일 (하나의 입력과 하나의 출력)과 int (출력 라인의 최대 길이, x라고 함)를 취할 C 프로그램을 작성하고 있습니다. 입력 파일의 모든 줄을 읽고 첫 번째 x 문자를 출력 파일에 쓰고 싶습니다 (실제로 파일을 "트리밍"). 여기 C : getc를 사용하여 비 UTF-8 문자 생성을 피하는 방법?
내 코드입니다 :int main(int argc, char *argv[]) {
const char endOfLine = '\n';
if (argc < 4) {
printf("Program takes 4 params\n");
exit(1);
} else {
// Convert character argument [3] (line length) to an int
int maxLen = atoi(argv[3]);
char str[maxLen];
char *inputName;
char *outputName;
inputName = argv[1];
outputName = argv[2];
// Open files to be read and written to
FILE *inFile = fopen(inputName, "r");
FILE *outFile = fopen(outputName, "w");
int count = 0;
char ch = getc(inFile);
while (ch != EOF) {
if (ch == '\n') {
str[count] = (char)ch;
printf("Adding %s to output\n", str);
fputs(str, outFile);
count = 0;
} else if (count < maxLen) {
str[count] = ch;
printf("Adding %c to str\n", ch);
count++;
} else if (count == maxLen) {
str[count] = '\n';
}
ch = getc(inFile);
}
}
return 0;
}
유일한 문제는 마지막 문자는 작은 따옴표가있는 경우, 그것은 비 UTF-8 문자, 같은 출력한다이다 :
For Whom t
John Donne
No man is
Entire of
Each is a
A part of
If a clod
Europe is
As well as
As well as
Or of thin
Each man��
For I am i
Therefore,
For whom t
배열을 오버플로하는 'else if (count == maxLen)'섹션에서 정의되지 않은 동작이 있습니다. – paddy
싱글 바이트 문자를 포함하는 데이터 스트림의 비 UTF8 문자는 무엇입니까? – bvj
@bvj 0-127 범위에없는 8 비트'char'는 올바르게 코드화 된 UTF8 코드 포인트가 아닙니다. – chux