C语言输入字符型指针数组怎么输

#include"stdio.h"
main()
{
char *p[10],*temp;
int i,j,k;
for(i=0;i<10;i++)
{
printf("输入第%d本书的书名\n",i+1);
gets(p[i]);
}
}
运行了结果出错,把gets()改为scanf()也不行,应该怎么输入啊

#include"stdio.h"
main()
{
char *p[10],*temp;//p[10]是一个字符数组,里面存放的是一个地址而已,所以不能放下你整个书名,即你输入的字符串。你可以把char *p[10]改成p[10][100],这样就有空间存储你输入的字符串了。
int i,j,k;
for(i=0;i<10;i++)
{
printf("输入第%d本书的书名\n",i+1);
gets(p[i]);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-11
*p[10],具有10个字符指针的数组,先要存在具体地址,否则是野指针,发生错误

#include "stdio.h"
#include "stdlib.h"
main()
{
char *p[10],*temp;
int i,j,k;

for(i=0;i<10;i++)
{
p[i]=(char*)malloc(sizeof(char)*50);//开辟内存
}
for(i=0;i<10;i++)
{
printf("输入第%d本书的书名\n",i+1);
gets(p[i]);
}

for(i=0;i<10;i++)
{
printf("%s\n",p[i]);
}
}本回答被提问者和网友采纳
第2个回答  2011-07-11
没有为指针p分配内存
#include <stdio.h> //printf头文件
#include <string.h> //memset头文件
#include <malloc.h> //malloc头文件
int main()
{
char *p[10];
int i;
for(i=0;i<10;i++)
{
char buf[256];
memset(buf, 0, sizeof(buf)); //初始化内存
printf("输入第%d本书的书名\n",i+1);
gets(buf); //把书名放入缓存
p[i] = (char*)malloc(strlen(buf)+1);//在堆上为指针申请一块内存区域
strncpy(p[i], buf, strlen(buf)+1); //将缓存中的书名拷贝到指针所指的内存区域
}
//测试
for(i=0;i<10;i++){
printf("%s\n",p[i]);
}//测试结束

for(i=0;i<10;i++){
free(p[i]); //避免内存泄露
}
getchar(); //vs下运行时等待按键输入,避免运行结果一闪而过
return 0;
}
第3个回答  2015-05-17
char pointerStr[100]
scanf("%s", pointerStr)
第4个回答  2011-07-11
试试改成这样:
#include"stdio.h"
main()
{
char *p[10],*temp;
int i,j,k;
for(i=0;i<10;i++)
{
printf("输入第%d本书的书名\n",i+1);
gets(p);
}
}
相似回答