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

标签 c arrays pointers

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

相关文章:

c - 指向数组类型混淆的指针

c - 将整数分配/转换为指针

c - 如何在用户将两个字符作为输入插入时测量两个字符之间的时间(以秒为单位)

java - 反转子数组 X[i,...,j] 的递归函数。从索引 i 到 j 的元素

c - 数组上的链表分配器

c++ - 函数、数组和动态数组

c - 读取未知大小/长度的文件,剥离非字母字符,并将大写更改为小写

c - 从 stdin 查找文件的大小给出了错误的数字

java - 如何在运行时根据用户/程序员的需要自动增加数组的大小?

arrays - 复制 2 维矩阵以创建 3 维数组(在 R 中)