나는이 방법을 사용하고 있습니다. stringcontent.h
파일에 char 배열을 정의했으며이 배열은 다른 파일 test.c
의 메서드에서 가져옵니다.C의 다른 파일에서 배열 가져 오기
나는이 방법 인터페이스 (기능 서명)를 고수해야하고 어떻게 해결할 수 있습니까?
나는이 방법을 사용하고 있습니다. stringcontent.h
파일에 char 배열을 정의했으며이 배열은 다른 파일 test.c
의 메서드에서 가져옵니다.C의 다른 파일에서 배열 가져 오기
나는이 방법 인터페이스 (기능 서명)를 고수해야하고 어떻게 해결할 수 있습니까?
내가 이해하면 get_char_array 함수를 사용하여 변수를 가져 오려고합니다. 난 당신이 다음을 수행 할 필요가 이해한다면 그런 (숯불에 포인터에 대한 포인터를받을 수 get_char_function 변경) :
는// stringcontent.h
char content1[] = "blahblah";
void get_char_array(int which,char **buffer){
if(which == 1)
*buffer = content1;
printf("%s",*buffer); // prints : "blahblah"
// and so on.....
}
// test.c
#include "stringcontent.h"
main(){
char *buf;
get_char_array(1,&buf);
printf("%s",buf); // prints "blahblah" !!!
}
편집 :
는 헤더 파일에 선언을를 넣어 및 구현 ".c"또는 링커 오류가 발생합니다.
// stringcontent.h
#ifndef __STRINGCONTENT_H
# define __STRINGCONTENT_H
void get_char_array(int which,char **buffer);
#endif
// stringcontent.c
char content1[] = "blahblah";
void get_char_array(int which,char **buffer){
if(which == 1)
*buffer = content1;
printf("%s",*buffer); // prints : "blahblah"
// and so on.....
}
// test.c
#include "stringcontent.h"
main(){
char *buf;
get_char_array(1,&buf);
printf("%s",buf); // prints "blahblah" !!!
}
은 (GCC를 사용하는 경우) 컴파일하려면 :
gcc -Wall test.c stringcontent.c -o test
참고하면, 포인터를 필요로하는 유일한 이후 "수출"content1
에, 함수에 의해 반환되는 필요가 없습니다.
여기 strcpy를 사용하여 다른 해결책이다. 이 경우 포인터에 포인터를 전달할 필요가 없습니다.
// stringcontent.h
char content1[] = "blahblah";
void get_char_array(int which,char *buffer){
if(which == 1)
strcpy(buffer,content1);
printf("%s",buffer); // prints : "blahblah"
// and so on.....
}
// test.c
#include "stringcontent.h"
#define GOOD_SIZE (100)
main(){
char buf[GOOD_SIZE];
get_char_array(1,buf);
printf("%s",buf); // prints "blahblah" !!!
}
이 경우 get_char_array를 호출하기 전에 buf에서 충분한 크기를 할당해야합니다.
저는 첫 번째 솔루션을 선호합니다. strcpy를 사용할 필요가 없습니다. buf에 충분한 공간을 할당하지 않으면 문제가 발생할 수 있습니다. 한 가지 해결책은 함수에서 buf의 크기를 전달하고 strcpy 전에 확인하거나 strncpy를 사용하는 것입니다.
사용 :
extern char content1[];
선언 stringcontent.h
및 stringcontent.c
라는 이름의 파일에 배열 정의 및 함수 정의를 넣어. 객체 파일과 함수 정의를 헤더 파일에 넣으면 안됩니다.
"stringcontent.h"라는 코드는 실제로 "stringcontent.c"이어야합니다. "stringcontent.h"에서'void get_char_array (int, char * buffer);'만 선언해야합니다. 그렇게하지 않으면 링커 오류가 발생합니다. @ rbelli의 응답이 필요한 것 같아서 응답을 편집 할 수있는 자유를 얻었습니다. – j4x
@ D-Shan : 주제에서 벗어나지 만 귀하의 아바타를 발견하고 전적으로 동의합니다. – cHao
@cHao 네가 너무. – Dinushan