传递char型指针数组给函数,并转换为int型的问题求解

Roger_Zh 2011-09-08 05:57:36
好久没来了,这段正在学LINUX下的C编程,愁死我了。
看:

//乘法表,自定义开始数字和结束数字
#include <stdio.h>
void func_99multiplication_table(char *argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
//printf("%s\n%s\n",argv[1],argv[2]); //取消这段的注释,运行到这里就会提示“段错误”
printf("%d\n%d\n",argv[1],argv[2]); //输出收到的参数值,总是得到47,116这两个数据,晕
/*for (i=argv[1];i<=argv[2];i++) //还不知道怎么调用所以这里先注释掉
{
for (j=1;j<=i;j++)
{
printf("%dx%d=%d ",j,i,j*i);
if (j==2 && (i==3 || i==4)) printf(" ");
}

printf("\n");
}*/
}

int main(int argc, char *argv[])
{
printf("Hello,C in Linux!\n");
if (argc != 3) //参数不符合要求则提示
{
printf("Wrong parameters,Please give the start digit and end digit,for example:\n ./programname 1 9\nit's mean calc from 1 to 9.\n");
return(0);
}
printf("Total para: %d\nPragram name:%s\nPara 1: %s\nPara 2: %s\n",argc,argv[0],argv[1],argv[2]); //输出参数值,这里正常

func_99multiplication_table(*argv);
}


使用
./test99table 1 3
运行后得:
Hello,C in Linux!
Total para: 3
Pragram name:./test99table
Para 1: 1
Para 2: 3
now in func_99_multiplication_table().
47
116
...全文
354 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roger_Zh 2011-09-12
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lishanchao 的回复:]

引用 20 楼 roger_zh 的回复:

引用 19 楼 lishanchao 的回复:

引用 17 楼 roger_zh 的回复:

引用 15 楼 lishanchao 的回复:

引用 7 楼 roger_zh 的回复:

再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
pri……
[/Quote]

太感谢啦,你真热心。。。结贴啦!
沭水河畔 2011-09-12
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 roger_zh 的回复:]

引用 19 楼 lishanchao 的回复:

引用 17 楼 roger_zh 的回复:

引用 15 楼 lishanchao 的回复:

引用 7 楼 roger_zh 的回复:

再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multi……
[/Quote]
当然可以啊,C语言就是这样,有多种方法做同样的事。

void print_argv2(int argc,char **argv) /* "char **argv" is equal to "char *argv[]" */
{
int i=0;
printf("inner %s\n",__FUNCTION__);
for(i=0;i<argc;i++)
printf("%s\n",argv[i]);
}
Roger_Zh 2011-09-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lishanchao 的回复:]

引用 17 楼 roger_zh 的回复:

引用 15 楼 lishanchao 的回复:

引用 7 楼 roger_zh 的回复:

再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
pr……
[/Quote]

非常感谢您的指教。
不好意思,再请教下,在函数内能不能带下标获得argv数组的元素呢?
沭水河畔 2011-09-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 roger_zh 的回复:]

引用 15 楼 lishanchao 的回复:

引用 7 楼 roger_zh 的回复:

再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
printf("%d\n%d\n",*argv[1],……
[/Quote]

#include <stdio.h>

void print_argv(char **argv)
{
while(*argv)
{
printf("%s\n",*argv);
argv++;
}
}

int main(int argc,char **argv)
{
print_argv(argv);
return 0;
}
沭水河畔 2011-09-12
  • 打赏
  • 举报
回复
上面的函数还可以改进一下,减少循环执行次数:

for(j=1;j<=m;j++)
{
if(i>=j)
printf("%d*%d=%d\t",j,i,i*j);
else
break;
}
Roger_Zh 2011-09-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lishanchao 的回复:]

引用 7 楼 roger_zh 的回复:

再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
printf("%d\n%d\n",*argv[1],*argv[2]);


调用:
func_……
[/Quote]

按照您这个先将字符转数字再传到函数去,可以了。 只是不明白到底要怎么直接将收到的char *argv[]传递给函数去操作呢。试了好多方法都没成功。
沭水河畔 2011-09-12
  • 打赏
  • 举报
回复
楼主正好用了子函数嘛,那我就说一下,一般子函数的功能尽量单一,在其父函数中可以先做一些“dirty job”,然后直接把处理结果传给子函数。这样代码更清晰一些,子函数也更容易被复用。

#include <stdio.h>
#include <stdlib.h>

void mul99(int m)
{
int i=1,j=1;
if(m<1 || m>9)
{
printf("Please input a number from 1 to 9.\n");
return;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++)
{
if(i>=j)
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
}

int main(int argc,char **argv)
{
int m;
if(argc!=2)
return -1;
m=atoi(argv[1]);
mul99(m);
return 0;
}
沭水河畔 2011-09-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 roger_zh 的回复:]

再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
printf("%d\n%d\n",*argv[1],*argv[2]);


调用:
func_99multiplication_table(a……
[/Quote]要把字符串转换为整形才对,main的参数时char *argv[],所以argv[0],argv[1],argv[2]这些都是字符串,用atoi将其转换成整数就可以了。

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
int m,n;
if(argc!=3)
return -1;
m=atoi(argv[1]);
n=atoi(argv[2]);
printf("%s>%d %s->%d\n",argv[1],m,argv[2],n);
return 0;
}
Roger_Zh 2011-09-12
  • 打赏
  • 举报
回复
这个题应该不难的啊。为什么没有大牛给个正确答案。。。。再这样下去,给楼上几位顶成水贴了。。。
Roger_Zh 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ddjjiiii 的回复:]

void func( char **argv );//函数申明声明
func( argv );// 函数调用
就它了。
[/Quote]

我是这样写的啊。但是,在func()里通过arvg[0]和argv[1]得到的是我传递来的参数(数字)的ASCII码。。。而不是数字本身。
ddjjiiii 2011-09-09
  • 打赏
  • 举报
回复
void func( char **argv );//函数申明声明
func( argv );// 函数调用
就它了。
Roger_Zh 2011-09-09
  • 打赏
  • 举报
回复
再改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
printf("%d\n%d\n",*argv[1],*argv[2]);


调用:
func_99multiplication_table(argv);

编译无错

命令行传递参数 1 9
运行后
得到结果:
Hello,C in Linux!
Total para: 3
Pragram name:./test99table
Para 1: 1
Para 2: 3
now in func_99_multiplication_table().
49
57

这俩好像是1和9的ASCII码了。。。但是为什么不显示数字呢。

再次求助。谢谢。
Roger_Zh 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 roger_zh 的回复:]
好久没来了,这段正在学LINUX下的C编程,愁死我了。
看:

//乘法表,自定义开始数字和结束数字
#include <stdio.h>
void func_99multiplication_table(char *argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
//printf("%s\……
[/Quote]

按您的提示改成这样:
void func_99multiplication_table(char **argv)
{
int i,j;
printf("now in func_99_multiplication_table().\n");
printf("%d\n%d\n",argv[1],argv[2]);


调用:
func_99multiplication_table(argv);

得到结果:
Hello,C in Linux!
Total para: 3
Pragram name:./test99table
Para 1: 1
Para 2: 3
now in func_99_multiplication_table().
-1076746836
-1076746834

再次求助。谢谢。
Roger_Zh 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 proghua 的回复:]

引用 1 楼 modicum_lf 的回复:
void func( char **argv );//声明
char *argv[];
func( argv );// 调用
++
[/Quote]

按您的改得这样的结果:

Hello,C in Linux!
Total para: 3
Pragram name:./test99table
Para 1: 1
Para 2: 3
now in func_99_multiplication_table().
960066675
1818386804
A13433758072 2011-09-08
  • 打赏
  • 举报
回复
学习了
embed_rookie 2011-09-08
  • 打赏
  • 举报
回复
void func_99multiplication_table(char *argv)
改成void func_99multiplication_table(char *argv[])
proghua 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 modicum_lf 的回复:]
void func( char **argv );//声明
char *argv[];
func( argv );// 调用
[/Quote]++
modicum_lf 2011-09-08
  • 打赏
  • 举报
回复

void func( char **argv );//声明
char *argv[];
func( argv );// 调用


69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧