首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体的几个问题

2012-03-26 
结构体的几个小问题C/C++ code#include stdafx.h#include stdlib.h#include conio.h#include math.

结构体的几个小问题

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也没给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));
};



热点排行