C语言指针字符串赋值
程序如下,为什么我输入三个字符串后,输入的n[i]都是第三个字符串?
#include "stdio.h "
main()
{ int i;
char *name,*n[4];
for(i=1;i <=3;i++)
{
scanf( "%s ",name);
n[i]=name;
}
for(i=1;i <=3;i++)
{
printf( "%s ",n[i]);
}
}
我的目的是想输入三个字符串给字符串数组n。
n[0]里面还有别的用处。
另外该公式是摘抄的程序段,所以请尽量不要更改程序的结构,谢谢!
[解决办法]
#include "stdio.h "
#include <malloc.h>
#include <string.h>
main()
{ int i;
char *name,*n[4];
name = (char *)malloc(50); //分配空间
for(i=0;i <4;i++)
n[i] = (char *)malloc(50);
for(i=1;i <=3;i++)
{
scanf( "%s ",name); //name是指针没分配空间,不能进行该操作
//n[i]=name; //这里n[i](指针)全部指向name(最后一次的值,前面的值已经被覆盖)
strcpy(n[i],name); //这里改成这样
}
for(i=1;i <=3;i++)
{
printf( "%s\n ",n[i]);
}
}
[解决办法]
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char *name, *n[4];
clrscr();
name = (char *)malloc( 256 );
for ( i = 1; i < 4; i++ )
{
scanf( "%s ", name );
n[ i ] = ( char * )malloc( 256 );
strcpy( n[ i ], name );
}
for ( i = 1; i < 4; i++ )
printf( "%s\n ", n[ i ] );
free( name );
for ( i = 1; i < 4; i++ )
free( n[ i ] );
return 0;
}
/*字符串不能直接等*/