C语言指针字符串赋值

来源:百度知道 编辑:UC知道 时间:2024/05/11 12:24:39
程序如下,为什么我输入三个字符串后,输入的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]里面还有别的用处。
另外该公式和i是否从1开始没关系。

在C语言中并没有字符串这个类型。所说的字符串就是字符数组。也就是char类型的数组。
与普通数组不同的,字符串必须以'\0'作为结束符。
而在C语言中,类型为T的一维数组,其首地址等效于该类型的一维指针,即T*型。
于是字符串,也就是字符数组,首地址就可以当做char *型使用了。
事实上,在库函数以及大多数使用到字符串作为参数的函数中,其参数都是char *型的。

你的scanf("%s",name);有错误,
scanf要求的第二个参数必须是一个地址(指针),并且这个地址需要指向已经分配的存储空间,这样scanf执行时可以接受你的输入并将其保存到name指向的地址空间
但你的name只是声明为一个char* ,指向的地址却没有分配,这样scanf在运行时就会出错
------------------
按照你的目的应该可以这样写
#include <stdio.h>
#include<stdlib.h>
#include<malloc.h>
void main()
{
int i;
char *n[4];
char* name;
for(i=1;i<=3;i++) {
name=(char*)malloc(100);//在堆上分配100字节的空间,将地址保存在n数组中
scanf("%s",name);
n[i]=name;
}
for(i=1;i<=3;i++) {
printf("%s\n",n[i]);
}
}

n[i]=name;
改为
n[i]=*name;
因为当你输出的时候name所指的地址就是第三个的,你的复制语句又不是讲内容负给n[i] 的

char *name,*n[4]; 4改大点

for(i=1;i<=3