我有这些方法。
我在stringcontent.h
文件中定义了一个char数组,该数组来自另一个文件test.c
中的方法。
// 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 rubbish rubbish !!!
}
我必须坚持这个方法界面(功能签名),我该如何解决这个问题?
答案 0 :(得分:3)
如果我理解,你想使用函数get_char_array获取变量。然后,如果我理解你需要执行以下操作(更改get_char_function以接收指向char的指针):
// 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。
答案 1 :(得分:0)
使用:
extern char content1[];
stringcontent.h
中的声明,并将您的数组定义和函数定义放在名为stringcontent.c
的文件中。不应将对象和函数定义放在头文件中。