读书人

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

发布时间: 2012-04-12 15:46:35 作者: rapoo

将一个字符串str中的字符放到结构数组中的问题
/*
目的: 将字符串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);
}
也能正常输出,这是为什么?

[解决办法]
你这种做法不对,因为结构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);
}
[解决办法]
#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);
}

读书人网 >C++

热点推荐