我有这些方法。
我在stringcontent.h
文件中定义了一个字符数组,该数组取自另一个文件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 !!!
}
我必须坚持这个方法接口(interface)(函数签名),我该如何解决这个问题?
最佳答案
如果我理解,您想使用函数 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。
关于c - 从 C 中的另一个文件获取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914122/