从C中的另一个文件获取数组

时间:2012-03-28 19:10:52

标签: c arrays pointers

我有这些方法。
我在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 !!!
}

我必须坚持这个方法界面(功能签名),我该如何解决这个问题?

2 个答案:

答案 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的文件中。不应将对象和函数定义放在头文件中。