2 sinat 30083847 sinat_30083847 于 2015.07.24 14:35 提问

c语言 指针数组与scanf

#include
#include

void get(char p[])
{
for (int i = 0; i < 3; i++)
scanf_s("%s",p+i,10);
}
void exchange(char *p[])
{
char *temp;
for (int i = 0; i < 2; i++)
for (int j = i + 1; j < 3; j++)
{
if ((strcmp(p[i], p[j]))>0)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
void put(char *p[])
{
for (int i = 0; i < 3; i++)
{
printf("%s",
(p + i));
printf("\n");
}
}
int main()
{
void get(char *p[]);
void exchange(char *p[]);
void put(char *p[]);
char *p[3];
get(p);
printf("\n");
exchange(p);
put(p);
}

之后总是程序停止工作

5个回答

CSDNXIAON
CSDNXIAON   2015.07.24 14:39

c语言中的数组和指针
C语言指针数组
C语言 指针与数组
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

mixuema
mixuema   2015.07.24 22:33

get(char *p)

VisualEleven
VisualEleven   Ds   Rxr 2015.07.25 09:22

你的指针数组没有分配内存空间。

K346K346
K346K346   2015.07.25 10:57

代码写的好乱。首先函数的申明应该放在main函数外。前面都已申明定义,可以不用再次申明。其次为指针数组p中每一个指针变量p[0],p[1],p[2]赋值时,你没有给它申请空间。当然会报错。

u014306011
u014306011   2015.07.27 18:35

scanf_s("%s",p+i,10);
改为:
scanf("%s",p+i,10);

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
scanf能赋值字符数组,不能赋值给指针的问题
一直有这个疑问,并且经常纠结,今天终于搞明白了。 char *name1; char name2[20] ;  // char *name不能用scanf,没开辟空间指针只能接受地址默认为8个字节          NSLog(@"%lu,%lu",sizeof(name1),sizeof(name2)); // 打印结果为8,20,字符数组真正开辟了20个空间,指
C语言---关于scanf读入字符串的一些问题
scanf是C语言中常用的标准输入输出函数,它的常规用法是scanf(“输入格式”,输入地址),scanf从输入缓冲区取入数据按照指定的“输入格式”存储到指定的“输入地址”。 但是有一类问题通常令人头疼,那就是字符串的读入,此处仅仅讨论使用scanf读取字符串的一些问题。 理论上你只需要定义一个字符指针,然后scanf每次读入字符存储到该指针所指的存储空间,之后指针值自动加1. 所以,我们就有了下面
C语言学习笔记(18) 指针数组和数组指针分析
摘要:总结了指针数组和数组指针的定义,以及main函数的入口参数的意义,每一个部分给出一个例子加深理解。 一、三个问题    1.一维数组名代表了数组首元素的地址,二维数组名呢?     我的理解也是的,但是数组首元素的地址。     2.假设数组名为a,那么a和&a的地址值相同,意义不同,那么指向它们的指针类型相同吗?     答案是不同,这一点下面会解释到,因为a和&a的
C语言中指针数组作为参数传递修改内容
#include void change(char **strs){ strs[0] = "paaa"; strs[1] = "pbbb"; strs[2] = "cpcc"; strs[3] = "ddxd"; } int main() { char *strs[4]; int i; strs[0] = "aaa"; strs[1] = "bbb"; strs[2] =
C语言scanf函数详细解释
 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为:      scanf("",);scanf()函数返回成功赋值的数据项数
c语言中的一些问题(scanf循环、三维数组做形参)
<br />(1)关于多维数组做形参<br />      数组指针是指向数组的指针,是一个指针,其指向的类型是数组;定义方式为(*p)[][]<br />      指针数组是元素为指针的数组,是一个数组,其中的元素为指针;   定义方式为 *p[][]<br />          <br />      如果要将数组a[][]传递给函数fun(),这个函数的定义中形参需要这样定义 void  fun(int a[][6] )  调用的时候就可以直接使用fun(a)。 在二维数组传递的过程中,第一维的维
C语言指针数组(每个元素都是指针)
如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为: dataType *arrayName[length]; [ ]的优先级高于*,该定义形式应该理解为: dataType *(arrayName[length]); 括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *。
C语言 指针和指针数组作main函数的形参
不带形参的main函数一般写成: int main() 或 int main(void) 表示mian函数没有参数,调用mian函数时不需要给出实参。而mian函数有形参的形式:int main( int argc, char** argv) int main( int argc, char *argv[]) 我是这样理解这两种方式,其中第一种方式 **argv是指针的指针,指针指向变量,指
C语言scanf函数用法详细解释!!!
函数名: scanf  功 能: 执行格式化输入  用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为:      scanf("",); scanf()函数返回成功赋值的数据项数,出错时则
c语言之交换一个指针数组的值
#include <string.h> #include<stdlib.h> #include <stdio.h> #define N 4 int main() { void sort(char *name[], int n); void print(char **name, int n); char *string[N]={"You are so handsome!!","