请指点下!

来源:百度知道 编辑:UC知道 时间:2024/09/24 18:16:38
#include "stdio.h"
#include "conio.h"
#include "string.h"

void main(int argc,char *argv[])
{
char *str[5];
int i;

clrscr();
for(i=0;argc<0;argc--,i++)
strcpy(argv[argc],str[i]);
for(i=0;i<argc;i++)
printf("%s\n",str[i]);
}
我想从main函数里得到参数,并复制到数组指针里,在打印出来,但是出错了,请告诉下错在哪,谢谢!
不好意思,楼下老兄我调试了一下,还是错的,是不是我的编译器,有问题啊!

char *str[5];
str是个指针数组,里边放的都是char型指针,而指针没有指向有效内存空间,无法存放数据。
for(i=0;argc<0;argc--,i++)
这个循环条件是argc<0,可是argc表示参数的个数,最小是1个,就是程序自己的文件名,所以这个循环根本没运行
strcpy(argv[argc],str[i]);
strcpy第一个参数是目的字符串的指针,第二个参数是源字符串的指针,按照你的意图,反了。
for(i=0;i<argc;i++)
这个循环使用了上一个循环已经改变的argc,如果上一个循环起作用了,argc早就是0了。
建议循环之前把argc赋给另外一个变量以保护原始数据。
printf("%s\n",str[i]);
正好对应最开始的问题,str每一个元素都是指针没错,可是指针没有指向有效内存,当然无法printf了。

给你一个吧,试试,里边的6是每个参数的最大长度加1,也就是每个参数最多5个字符
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"

void main(int argc,char *argv[])
{
char * str = ( char * )malloc( ( argc - 1 ) * ( sizeof( char ) * 6 ) );
char * pstr = str;
memset( str, 0x00, ( argc - 1 ) * ( sizeof( char ) * 6 ) );
int i;

clrscr();
for( i = 1; i< argc;i++ )
{
strcpy(