jwz*_*alt -2 c arrays segmentation-fault
我正在尝试学习访问结构数组。以下代码可以编译,但执行时出现段错误(核心转储)。我做错了什么?
#include <stdio.h>
#include <string.h>
// data structure
struct book {
int book_id; // book id
int (*ptFunc) ( struct book ); // addr of printBook function
char title[50]; // book title
char author[50]; // book author
};
struct book aBooks[10];
/*************************************************************************
* main *
*************************************************************************/
void printBook ( struct book aBooks[], int id ) {
printf ( "book_id : %d\n", aBooks[id].book_id ); // access to struct
printf ( "func addr : %p\n", aBooks[id].ptFunc ); // pointer to funcion
printf ( "title : %s\n", aBooks[id].title ); // string
printf ( "author : %s\n", aBooks[id].author ); // string
printf ( "\n" );
}
int main (void) {
strcpy ( aBooks[0].book_id, 0 );
strcpy ( aBooks[0].ptFunc, printBook );
strcpy ( aBooks[0].title, "This Little Piggy" );
strcpy ( aBooks[0].author, "Bad Wolf" );
printBook (aBooks, 0 ); // function to show selected data
return 0;
}
Run Code Online (Sandbox Code Playgroud)
解决方案: 复制并粘贴我明白了!(我有指向一个正在工作的函数的指针,然后添加了分配一个字符串并复制和粘贴太多!)在“chrslg”的帮助下,分配部分应该是:
aBooks[0].book_id = 0 ;
aBooks[0].prtFunc = printBook;
strcpy ( aBooks[0].title, "This Little Piggy" );
strcpy ( aBooks[0].author, "Bad Wolf" );
Run Code Online (Sandbox Code Playgroud)
[感谢您的帮助,我不知道“超级用户”和“Stack Overflow”之间有区别,我学到了一些东西!]
strcpy ( aBooks[0].book_id, 0 );
表示将地址 0 处的字符串复制到地址处的内存中aBooks[0].book_id(因此也是 0,因为 aBooks 是全局变量,因此初始化为 0)。
读写地址0会导致段错误。
无论如何,这不是一个字符串。
你的意思是aBooks[0].book_id=0
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |