急等答案 先解决者100分全送 一道关于C语言结构体的简单问题 再线急等快救命啊!!!

longtian_haidao 2005-04-28 07:31:26
struct s
{
int a;
char b[4];
struct s *next;
}
main()
{
struct s *p;
p=(struct s)malloc(s****(struct s)); 产生空间
p->a=1; 赋值
p->b="as"; 赋值
printf("%d %s",p->a,p->b);
}

为什么这个程序中的 p->b="as"; 出错。
结构体中的指针不能给结构体成员赋值么???
上边程序应该怎么改?????
(除了用scanf 赋值
还能用什么办法)




...全文
207 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
leafsax 2005-04-29
  • 打赏
  • 举报
回复
字符串不能直接赋值
strncpy(char* dest,const char* source,int n)
如果p->b是字符数组,最好用这个函数,以避免下标越界
shazi_pig 2005-04-29
  • 打赏
  • 举报
回复
strcpy(p->b,"as");
字符串需要这样赋值。
dongpy 2005-04-29
  • 打赏
  • 举报
回复
为什么这个程序中的 p->b="as"; 出错。
========================================
b是数组名,不能作为左值。一种改法就是上面说的,用strcpy。

另一种改法就是
struct s
{
int a;
char *b;
struct s *next;
}
p->b="as"; //指向常量字符串
longtian_haidao 2005-04-28
  • 打赏
  • 举报
回复
谢谢
qrlvls 2005-04-28
  • 打赏
  • 举报
回复
1.malloc的返回值是一个指针,而 struct s 是一个结构,两个类型是不能合法转化的
sizeof(struct s)是结构 s 所占用的空间大小
malloc 分配了足够存放 s 结构的空间并返回一个指针,而这个指针就是一个 s 结构指针
2.你不能使用
指针 = "字符串"
的形式来赋值,除非在定义时(因为这时的字符串在编译时会分配空间存储常量)
上面我给出的方法实际上是将指针指向一个字符数组,也就相当于指向一个字符串
springzct 2005-04-28
  • 打赏
  • 举报
回复
p->b="as"; 出错。
是因为这是一个字符串的赋值,
字符串的赋值是不能这样写的,
要有一个头文件 include<string.h>
正确的写法是 strcpy(p->b,"as");
这是一个和整数不同的,
longtian_haidao 2005-04-28
  • 打赏
  • 举报
回复
不是很懂能否再说明白点
谢谢
qrlvls 2005-04-28
  • 打赏
  • 举报
回复
struct s
{
int a;
char b[4];
struct s *next;
}
main()
{
struct s *p;
p=(struct s)malloc(s****(struct s)); <-------
                    p = (struct *s)malloc(sizeof(struct s));
p->a=1; 赋值
p->b="as"; 赋值          <--------
                    这样赋值是不可能的
                    可以在 struct s *p; 前定义 char szString[_MAX_PATH];
                    strcpy(szString, "as");
                    p->b = szString;
printf("%d %s",p->a,p->b);
}
liujingfu123 2005-04-28
  • 打赏
  • 举报
回复
useresu(俗人) 正确,顶一个
fireflyc 2005-04-28
  • 打赏
  • 举报
回复
#include <iostream>//#include "stdio.h"
#include <cstdio>//#include "string.h"

using namespace std;

struct s
{
int a;
char b[4];
struct s *next;
};

void main()
{
struct s *p;
//p=(struct s)malloc(s****(struct s)); 产生空间
p = new s;
p->a=1;
strcpy(p->b,"as");
//p->b="as";
cout<<p->a<<p->b<<endl;//printf("%d %s",p->a,p->b);
}
zhangfjj 2005-04-28
  • 打赏
  • 举报
回复
呵呵,没有改过来

p=(struct s *)malloc(sizeof(struct s)); //这里应该是强制转换为一个指针 产生空间
p->a=1; 赋值
//p->b="as"; 赋值
//这里楼上说了,要用字符串复制函数
strcpy(p->b,"ab");

zhangfjj 2005-04-28
  • 打赏
  • 举报
回复
p=(struct s)malloc(s****(struct s)); 产生空间
p->a=1; 赋值
p->b="as"; 赋值
==========s****(struct s),应该是sizeof(struct s)

还有两个错误
p=(struct s *)malloc(s****(struct s)); //这里应该是强制转换为一个指针 产生空间
p->a=1; 赋值
//p->b="as"; 赋值
这里楼上说了,要用字符串复制函数
strcpy(p->b,"ab");
useresu 2005-04-28
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"

struct s
{
int a;
char b[4];
struct s *next;
};

void main()
{
struct s *p;
//p=(struct s)malloc(s****(struct s)); 产生空间
p = new s;
p->a=1;
strcpy(p->b,"as");
//p->b="as";
printf("%d %s",p->a,p->b);
}
useresu 2005-04-28
  • 打赏
  • 举报
回复
strcpy(p-b,"as");
useresu 2005-04-28
  • 打赏
  • 举报
回复
可以循环给数组赋值啊

或者你用string

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧