Если я понимаю, вы хотите получить переменную, используя функцию 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" !!!
}
EDIT:
Положите ваши Объявления и декларации в заголовочном файле и реализация в «.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.
Я предпочитаю первое решение, ему не нужно использовать strcpy. И если вы не выделяете достаточное пространство в buf, у вас могут быть проблемы. Одним из решений является передача размера функции buf в функцию и проверка ее перед strcpy или использование strncpy.
Код, который вы назвали «stringcontent.h», на самом деле должен быть «stringcontent.c». В «stringcontent.h» вы должны только объявлять 'void get_char_array (int, который имеет char * buffer);'. Если вы этого не сделаете, у вас появятся ошибки компоновщика. Ответ @ rbelli кажется тем, что вам нужно, поэтому я принял решение отредактировать его ответ. – j4x
@ D-Shan: Не в тему, но я заметил ваш аватар, и я полностью одобряю. – cHao
@cHao Твой тоже. – Dinushan