将一个字符串str中的字符放到结构数组中的有关问题
将一个字符串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);
}
/*
目的: 将字符串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);
}