指针数组输入字符串,关于scanf中的指针数组的输入问题,在线等

关于scanf中的指针数组的输入问题,在线等 - 故障解答 - 电脑教程网

关于scanf中的指针数组的输入问题,在线等

日期:2006-05-19   荐:
关于scanf中的指针数组的输入问题,在线等帮我看看我的程序问题错在哪里?运行出现段错误.int main(int argc ,char *argv[]){ char *output[3]={"one","two","three"}; char*input[4];//如果这里改成3,两段一起运行都没错误. int i=0; printf("output: "); while(i<3) { printf("%s ",*(output i)); i ; }/*如果不运行下面这一段是没有错误的*/ printf("intput: "); i=0; while(i<4) { scanf("%s",input[i]); printf("printf:%s ",*(input i)); i ; } return 0;} 我想做的是,在程序运行的过程中,从键盘输入指令,就相linux下面的指令那样可以后面带参数.我打算用类似上面的程序来做.可是总有错,大家一般是怎么实现的?在线等,谢谢char*input[4];这个只是声明了指针,并没有分配空间来存放你要输入的内容所以,你输入的东西不知道放哪这个可能就是问题的所在同意楼上char *output[3]={"one","two","three"};将那个指针指向了后面那个常量也就是说output已经指向了正确的地方了,所以不会出问题而input却没有初始化将“ char*input[4]; ”改为 “ char input[4][N]”( N哇为你自己定义的最大字符串的字符数),就可以了.那后的常量是存储在哪里呢?to lbing7 我也考虑过这个问题,困惑的是下面这段程序却可以不用直接输出char *output[3]={"one","two","three"};int i=0;printf("output: ");while(i<3){printf("%s ",*(output i));i ;}to arrowcy那常量是存储在哪里呢?如果要改,该怎么改啊to Olive_Eagle 好的,谢谢好不容易找到怎么回复.发现大家都基本上解答了我的疑问to arrowcy那么常量是存储在哪里呢?好奇的是常量要怎么存放,可以不用开辟空间,就"我想做的是,在程序运行的过程中,从键盘输入指令,就相linux下面的指令那样可以后面带参数."这个功能讨论.main(int argc,char *argv[ ]){……}形参argc是int 变量,含义是命令行中命令名和带参数个数之和; 字符指针数组argv的各个指针分别依次指向命令名和各参数的字符串例如:#include "stdio.h"main(int argc,char *argv[]){ int i; printf("argc=%d",argc); printf("Command name: %s",argv[0]); for(i=1;i<argc;i ) printf("Argument NO.%d: %s",i,argv[i]);}假设程序生成可执行文件名为test.exe则,可以在操作系统的 命令提示符 下键入命令行为.注意先进入test.exe文件所在的目录,比如test在D盘的STUDY目录下面,则在命令提示符下面输入D:回车,然后输入CD STUDY进入相应目录然后就可以如下输入(达到像"linux下面的指令那样可以后面带参数"执行).输入:test book pen paper输出:argc=4Command name: testArgument No.1 bookArgument No.2 penArgument No.3 paper参数的输入与main函数参数int argc,char *argv[]交互作用,而不是一味用一般带参函数,或者由普通代码来产生,应当考虑与main函数参数来交互,以产生"linux下面的指令那样可以后面带参数"达到一定功能的效果.同意楼上#include "stdio.h"#include "malloc.h"int main(int argc ,char *argv[]){ char *output[3]={"one","two","three"}; char*input[4]; int i=0; for(i=0;i<4;i ) { input[i]=(char*)malloc(sizeof(char)*10); input[i][9]='\0'; } i=0; printf("output: "); while(i<3) { printf("%s ",*(output i)); i ; } printf("intput: "); i=0; while(i<4) { scanf("%s",input[i]); printf("printf:%s ",*(input i)); i ; } return 0;} input[i]没有分配空间改成: i=0; while(i<4) { input[i] = (char *)malloc(100 * sizeof(char)); scanf("%s",input[i]); printf("printf:%s ",*(input i)); i ; }谢谢大家的回复
标签: