结构体的几个小问题
- C/C++ code
#include "stdafx.h"#include <stdlib.h>#include "conio.h"#include "math.h"#include <string.h>#define N 3struct node{ char *pname; //长度不限,动态分配内存};void main0(){ struct node *pnode; struct node *ptext[N]; struct node s[N]; pnode = s; int i; printf("input:\n"); for(i = 0; i < N; i++) { scanf("%s\n", pnode->pname); ptext[i] = pnode++; } printf("output:\n"); for(i = 0; i< N; i++) { printf("%s\n", ptext[i] ->pname); }}int _tmain(int argc, _TCHAR* argv[]){ main0(); system("pause"); return 0;}上面这段程序为什么报错?
[解决办法]
scanf("%s\n", pnode->pname);
都没分配内存,输入什么
[解决办法]
不行。。。s也没给pname分配内存
[解决办法]
[解决办法]
每次都要分配给有限的空间啊:s[0].pname=(node*)malloc(sizeof(char)*100);
//malloc返回空指针要强制转换,分配100字节
lz这个结构体有点奇怪了吧!还不如直接定义一个二维数组.
struct node *pnode;和struct node *ptext[N];都多余了,直接就用s[].pname了。
如果想要做链表的话,应该:
struct node
{
char pname[100];//或者char *name;要分配空间
node *next; //这个指向下一个结构体s[i].next=(node*)malloc(sizeof(node));
};