C程序指针使系统调用崩溃

C程序指针使系统调用崩溃,c,pointers,system,C,Pointers,System,而不是写,它崩溃在那里,为什么?我做错了什么?这不应该得到我结构中第一个国家的代码吗?谢谢好吧,你需要仔细听一下你的编译器,认真对待它的警告 这: 是错误的,并将解释警告。变量nLines的类型为int,但如果查看[documentation for write],您会发现第二个参数的类型为void* 因此,它将把整数值解释为指针,并开始读取您无权读取的内存 你需要: write(fd2, nLines, sizeof(nLines)); 请注意,sizeof不是一个函数,当参数是类型名时,它

而不是写,它崩溃在那里,为什么?我做错了什么?这不应该得到我结构中第一个国家的代码吗?谢谢

好吧,你需要仔细听一下你的编译器,认真对待它的警告

这:

是错误的,并将解释警告。变量nLines的类型为int,但如果查看[documentation for write],您会发现第二个参数的类型为void*

因此,它将把整数值解释为指针,并开始读取您无权读取的内存

你需要:

write(fd2, nLines, sizeof(nLines));
请注意,sizeof不是一个函数,当参数是类型名时,它只需要括号,因为它需要有问题的类型的强制转换表达式,并且强制转换被写为括在括号中的类型名


此外,您还需要为I/O可能失败的现实做好准备。write函数有一个返回值,您应该检查它。

除了unwind指出的严重问题外,您的代码还有许多其他问题

这:

不是结构的数组。一旦分配,它可以是指向结构的指针数组

这:

不需要编写一个CountryData实例,更不用说它们的整个数组了。它接受第一个元素名称的第一个字符的整数值,并将其视为指针,就像处理nLines一样

如果要写入第一个元素,它将如下所示:

write(fd2, (countryDataPtr[0]->name[0]), sizeof(CountryData));
如果你想写所有的元素,你要么需要一个循环,要么需要一个连续的结构数组,你可以一次写。

好吧,如果运气好的话,nLines可以包含一个值,表示用户可写内存区域中的地址:-这无论如何都是无用的
printf("test: %s\n", countryDataPtr[0]->code[0]);
write(fd2, nLines, sizeof(nLines));
write(fd2, &nLines, sizeof nLines);
CountryData **countryDataPtr;   // Array of structs
write(fd2, (countryDataPtr[0]->name[0]), sizeof(CountryData));
write(fd2, countryDataPtr[0], sizeof(CountryData));