2011-08-27 2 views
0

나는 CLI 프로그램을 프로그래밍하여 (실제로 완성도가 거의 다름) 사용자에게 어휘 또는 실제로 정의 할 질문과 응답을 테스트합니다. GitHub의에글로벌 숯불 포인터 만들기

전체 소스 : https://github.com/megamasha/Vocab-Tester

파일에서로드 및 파일로 저장이 별도의 기능에서 주 모두 외부에서 처리됩니다(). 현재 그들은 동일한 소스 파일에 있지만이 두 가지 방법 (파일 내에서)과 b) 별도의 데이터베이스 운영 체제 파일로 끝나는 경우를 알고 싶습니다.

사용자가 가장 최근에로드 한 파일에 저장할 수 있도록하려는 경우 loaddatabase() 함수가 savedatabase() 함수가 액세스 할 수있는 파일 이름에 전역 char *을 정의해야합니다.

함수 밖에서 char *를 선언하면 읽기 전용이므로 파일 이름을 쓰려고하면 segfault가 발생합니다. loaddatabase() 함수 내에서 선언하면 savedatabase()에 액세스 할 수 없습니다.

변수를 정적으로 선언하면 다른 함수에서 액세스 할 수있게되거나, 그렇지 않은 경우 두 함수가 동일한 char *에 액세스하도록 허용 할 수 있습니까?

당신은 하나의 .c 파일을 정의하여 글로벌 변수를 정의 할 수 있습니다
+0

저장 데이터베이스 /로드 데이터베이스의 파일 이름을 paremter로 지정하는 것이 좋지 않습니까? –

답변

2

:

char * database; 

그리고 .h 파일에 선언하여 :

extern char * database; 

그리고 .h 파일을 포함하여 변수를 사용하는 모든 파일에서.

extern 키워드는 정의하지 않고 변수를 선언합니다. 변수가 다른 파일에 있음을 컴파일러에 알려줍니다.

문제의 경우로드/저장 함수 파일에 char * database을 정의하고 주 기능 파일에이 파일을 선언 할 수 있습니다 (extern char * database).

char * database 대신 char database[1024]을 사용하여 동일한 작업을 수행 할 수 있습니다.이 경우 파일 이름에 메모리를 할당하고 해제해야합니다. 이렇게하면 데이터베이스에 직접 쓸 수 있습니다.

+0

save와 load 함수는 항상 같은 파일에있을 것이지만, 항상'main()'과 같은 파일에있는 것은 아닙니다. 제 문제는 그것들은 별개의 함수에 있지만 동일한 변수에 액세스해야한다는 것입니다. –

+0

답변을 업데이트했습니다. – arnaud576875

1

문자 배열, 즉 char filename [260]을 선언해야합니다.