我正在尝试创建一个返回指向结构的指针的函数,这里是代码:
结构:
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);
}
问题在哪里?我认为我正在实现对结构的指示,不是吗?
它实际上返回了一个分段错误。
提前感谢!
答案 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");
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,运行良好。