Visual C++ 6.0을 사용하고 있으며 아래 코드가 있습니다.strcpy가 전체 문자열을 복사하지 않습니다.
char filename[1000], string[5];
FILE *fin;
strcpy(filename, argv[3]);
if ((fin = fopen(filename, "r")) != NULL)
{
fgets(string, 100, fin);
string[strlen(string)-1] = NULL;
printf("filename = %s\n", filename);
printf("argv[3]= %s\n", argv[3]);
printf("string = %s\n", string);
}
argv [3]은 전체 경로 및 파일 이름입니다. C는 : 바탕 화면 \ file.txt 파일 \ 사용자 \하고, 파일의 내용은 따라서 "1"은 "문자열"변수에 저장해야
1
2
3
입니다. 그러나
, 약 1 4 실행 중, 나는 마지막 "t"를 누락 출력filename = C:\Users\Desktop\file.tx
argv[3] = C:\Users\Desktop\file.txt
string = <very long garbage value>
왜
strcpy(filename, argv[3]);
전체 문자열을 복사하지 않았다 얻을 것? 그리고 파일이 존재해서는 안되기 때문에 왜 fin이이 경우 NULL이 아닌지?
이 코드는 다중 스레드 프로그램에 있지만 단 하나의 스레드 만이 코드를 실행한다고 추가해야합니다. 당신은 C를 사용하는 경우
까지 읽고 [] '와'FILE' 대신'std :: string'과 스트림을 사용합니까? – DCoder
저는 char []와 FILE에 대해 더 잘 알고 있습니다. 이것은 변화를 가져 왔을 까? – Rayne
네, 그렇습니다. 'std :: string'은 대부분의 다른'std' 컨테이너와 마찬가지로 자동으로 확장하여 사용자가 입력 한 모든 데이터를 포함하므로 길이와 메모리 할당을 수동으로 추적하지 않아도됩니다. – DCoder