c函数返回指向struct的指针

时间:2016-05-04 18:57:06

标签: c pointers struct

我正在尝试创建一个返回指向结构的指针的函数,这里是代码:

结构:

struct Nia{
    char NIA[6];
};

功能:

struct Nia * prueba(){
   struct Nia *nia = malloc(sizeof(struct Nia)*2);
   strcpy(nia[0].NIA,"11111\0");
   strcpy(nia[1].NIA,"11112\0");
   return nia;
 }

主要功能:(它不打印任何东西,但应打印11111)

int main(int argc, char** argv) {

   struct Nia *nia = prueba();

   printf("%s\n",nia[0].NIA);

return (EXIT_SUCCESS);

}
问题在哪里?我认为我正在实现对结构的指示,不是吗?

它实际上返回了一个分段错误。

提前感谢!

1 个答案:

答案 0 :(得分:1)

我使用XmlDocument doc = new XmlDocument(); Doc.load(@"doc.xml"); XmlElement root = doc.DocumentElement; var node = root.SelectSingleNode("/DataFeedObject/DataItems/DataItem/[Name = 'Agent_LastName']/Value");

在Linux Mint 64位上编译并运行了以下test.c文件
gcc -o test test.c -Wall

它输出#include <stdlib.h> #include <stdio.h> #include <string.h> struct Nia{ char NIA[6]; }; struct Nia * prueba(){ struct Nia *nia = malloc(sizeof(struct Nia)*2); strcpy(nia[0].NIA,"11111\0"); strcpy(nia[1].NIA,"11112\0"); return nia; } int main(int argc, char** argv) { struct Nia *nia = prueba(); printf("%s\n",nia[0].NIA); return (EXIT_SUCCESS); } ,无需投诉即可编译。老实说,即使我省略11111 d标题,它也会运行,带有警告的albiet,但你的系统可能不同,所以只要包含它们就可以了。

当然,考虑到这一点,如果你使用 C ++ 而不是 C ,这可能会有问题,不是同一种语言< / strong>即可。您看,include在指定g++void*返回malloc()类型的符号时会遇到问题,而Nia*很乐意制作转换给你。您可能正在使用的另一个C ++编译器可能允许您编译它,但gcc没有成员,因此void成员可能尚未初始化,这会导致您出现段错误尝试打印它。 为了绝对确定,请使用调试器并找到发生内存访问冲突的位置。

更新:刚刚在同一系统上运行Netbeans,运行良好。