用指针给结构体中字符数组赋值问题

拳世界最好855 2015-07-12 10:52:39
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Day
{
int y;
int m;
int d;
};
struct Ren
{
int aa;
char name[20];
struct Day day;
};

int main()
{

struct Ren r1;

struct Ren *p; //定义结构体指针
p = &r1;


p->name[20] = "gggggg";//////这一行有警告
p ->day.y = 1990;
p->aa = 12;


printf("%d\n",p->day.y);
printf("%d\n",p->aa);
printf("%c\n",p->name);
system("pause");
return 0;
}
运行出结果字符串是乱码,求解?
...全文
373 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-07-13
  • 打赏
  • 举报
回复
strcpy(str, "World!");  // 正确但不安全
strncpy(str,"World!",9);str[9]=0;//完全正确
「已注销」 2015-07-13
  • 打赏
  • 举报
回复
要向结构体的 name 赋值,也应该是 p->name 而不是 p->name[20]。首先赋值方式不对,应该是 strcpy,其次 p->name[20] 本身已经越界了,而且类型也不对,把一个字符赋值给一个字符!看看这种写法:

char str[10] = "Hello!";
str[0] = 'h';           // 正确
str[10] = 'H';          // 越界但语法正确
str[10] = "World!";     // 越界且语法不正确,类型不匹配
strcpy(str, "World!");  // 正确
对于结构体成员,写法是一样的,只是前面多了一个 "p." 或 "p->" 而已。如果你连这段代码都会犯错误,只能说明基础不扎实。
lin5161678 2015-07-13
  • 打赏
  • 举报
回复
引用 1 楼 lgbxyz 的回复:
数组不能这么赋值得用memcpy
汗 字符串有专用的 strcpy 或 strncpy 用什么memcpy 自造麻烦?
「已注销」 2015-07-13
  • 打赏
  • 举报
回复
// 字符指针和字符数组的初始化:
char *ps      = "Hello!";
char str[256] = "Hello!";
// 运行时刻重新赋值:
// 对于指针而言,只是改变了指针指向
ps = "World!";
// 对于数组而言,改写内存区域的内容
strcpy(str, "World!");
// 结构体同理:
// 结构体字符指针和字符数组成员的初始化:
typedef struct { const char *p; } STRUCT_A;
typedef struct { char str[256]; } STRUCT_B;
// 指针和数组初始化方式相同:
STRUCT_A st_a = { "Hello!" };
STRUCT_B st_b = { "Hello!" };
// 运行时刻重新赋值(同上):
st_a.p = "World!";
strcpy(st_b.str, "World!");
1987andy 2015-07-13
  • 打赏
  • 举报
回复
字符数组可不支持这种直接字符串赋值的,你应该通过内存copy等方式来实现,或者通过字符串指针给数组直接赋值
LubinLew 2015-07-12
  • 打赏
  • 举报
回复
引用 2 楼 gcx100 的回复:
[quote=引用 1 楼 lgbxyz 的回复:] 数组不能这么赋值得用memcpy
如果是定义的时候可以直接赋值是吧,比如 char str[20] = "ggggggg"[/quote] 你得分清 初始化和赋值
sprawling 2015-07-12
  • 打赏
  • 举报
回复
定义的时候是可以的,但是中间的赋值需要memcpy, 如果你想直接赋值就用MFC中的CString吧。
拳世界最好855 2015-07-12
  • 打赏
  • 举报
回复
引用 1 楼 lgbxyz 的回复:
数组不能这么赋值得用memcpy
如果是定义的时候可以直接赋值是吧,比如 char str[20] = "ggggggg"
LubinLew 2015-07-12
  • 打赏
  • 举报
回复
数组不能这么赋值得用memcpy

69,373

社区成员

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

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