는 다음과 같은 프로그램을 고려 :함수 역시() : 대상 문자열에서 임의의 문자
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int ret = 0;
char dirname[] = "test/";
int path_maxlen = 256;
char path[path_maxlen];
int filename_maxlen = path_maxlen - strlen(dirname);
strncat(path, dirname, path_maxlen - 1);
strncat(path, "file.txt", filename_maxlen);
FILE *file = fopen(path, "r");
printf("path: %s\n", path);
if (file != NULL) {
printf("success\n");
fclose(file);
} else {
printf("fail\n");
ret = 1;
}
return ret;
}
이 처음 일 듯하지만 그것이 존재하지만 즉, 파일을 열 수 없습니다, 실패 시작 프로그램이나 파일을 변경하지 않았습니다.
그 시점에서 나는 path
을 인쇄하는 라인을 추가했습니다. 출력을 파일로 재 지정하면 path
앞에 임의의 문자 (ASCII : 1 SOH 'heading start')가 오게됩니다. 그래서 나는 strncat
이 여기에 제대로 사용되지 않고 임의의 정크가 내 경로 배열에 기록된다고 가정합니다.
위의 예에서 문자열을 올바르게 연결하려면 어떻게해야합니까?
추 신 : 내 OS는 우분투 16.04입니다. 컴파일러는 다음과 같습니다
$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
'char path [path_maxlen] = {0}; ' – DyZ
@DYZ 아아, 가변 길이 배열에는 작동하지 않습니다. – AlexD
@AlexD 그래서 가변 길이 배열을 사용하지 않습니다 ... 그래서,'path [0] = 0;'입니다. – DyZ