光影魔术手4.4.1手机版:c语言问题急啊!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 09:50:21
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{ int i;
char *a[5],word;
for(i=0;i<5;i++)
{scanf("%s",&word);
a[i]=(char *)malloc(31);
*a[i]=word;}
for(i=0;i<5;i++)
printf("%s",*a[i]);

}

错在哪?编译能通过,运行就不行了

先给你这段改好的代码:
※※※※※※※※※※※※※※※※※※※※※※※※※※※
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{ int i;
char *a[2];
for(i=0;i<2;i++)
{
a[i]=(char *)malloc(4*sizeof(char));
scanf("%s",a[i]);

//a[i]=word;
}
for(i=0;i<2;i++)
{
printf("%s----%x\n",a[i],a[i]);
free(a[i]);
}

}
※※※※※※※※※※※※※※※※※※※※※※※※※※※

我把具体的数字改了,不影响程序的。
随便点几个地方
① malloc函数使用不正确。malloc总是和free同时来使用的,否则会引起内存泄漏。因此我在输出内容的同时,用了free函数来释放空间。

② 去掉了你的变量word。首先是word的声明有问题,word声明为一个字符,但是实际上用来接收字符串。在C语言中,字符串实际上就是字符的数组。读取字符串的时候,scanf后面的变量实际上就是个指针。因此,我首先给a[i]分配了合适的内存,然后把a[i]作为指针放在了scanf里头。

③ 分配内存的时候用malloc函数,一般都是malloc(n*sizeof(char)),里头当然可以换成其它类型,外面要求强制指针转换。

④ 我的程序中,要求输入的字符串长度最大为3。因为字符串的最后一位总是“\0”作为结束符号。而我只声明了4位。你可以自己修改。

既然只是输入输出字符而已,何必要用字符串呢?
把最后一句改为printf("%c",*a[i]);就行了。
另外,为a[i]分配空间应该写成a[i]=(char *)malloc(sizeof(char));

char *a[5],word;
改为
char *a[5];
char *word;