将一个字符串str中的字符放到结构数组中的问题

nnxingyun 2007-07-27 01:41:26
/*
目的: 将字符串str中的字符放到结构数组arr[0]中
*/
struct man{
char *name;
}arr[2];

void main()
{
char *str = "ABCDEFG";
struct man *p;
p = arr;
strcpy(p->name, str);
printf("%s\n", p->name);
}
正确的输出应该显示: ABCDEFG
但现在运行后输出总显示: Null pointer assignment
用 p->name = str; 替换掉strcpy(p->name, str);就能正常输出了.

或者改为
struct man{
char *name;
}arr[2] = {{" "},
{" "}};

void main()
{
char *str = "ABCDEFG";
struct man *p;
p = arr;
strcpy(p->name, str);
printf("%s\n", p->name);
}
也能正常输出,这是为什么?
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nnxingyun 2007-07-27
  • 打赏
  • 举报
回复
知道怎么回事了, 谢谢大家.
jixingzhong 2007-07-27
  • 打赏
  • 举报
回复
p->name = (char*) malloc(strlen(str) + 1);
strcpy(p->name, str);

=============
en
yydrewdrew 2007-07-27
  • 打赏
  • 举报
回复
#include<stdio.h>
#include <string.h>

struct man{
char name[10];
}arr[2];

void main()
{
char *str = "ABCDEFG";
struct man *p;
p = arr;
strcpy(p->name, str);
printf("%s\n", p->name);
}
nevergone 2007-07-27
  • 打赏
  • 举报
回复
给指针分配一点空间吧。
Inhibitory 2007-07-27
  • 打赏
  • 举报
回复
你这种做法不对,因为结构struct man中的name只是一个指针,并没有为其分配空间,所以直接给其赋值,是一种错误行为。要给某一指针类型的变量赋值,首先要为其分配好空间,然后再赋值:上面的程序可以简单的改为:
void main()
{
char *str = "ABCDEFG";
struct man *p;
p = arr;
p->name = (char*) malloc(strlen(str) + 1);
strcpy(p->name, str);
printf("%s\n", p->name);
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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