用codeblocks向main函数传递参数,控制台输出乱码

fantasy408 2017-10-26 11:56:21
大家好,在学习c语言指针这一章时,谭四版有个例子:

#include "stdio.h"

int main(int argc,char *argv[])
{
while(argc>1)
{
++argv;
printf("%s\n",argv);
--argc;
}
return 0;
}


我用的IDE是codeblocks(自带mingw),想试验一下这个例子。
百度一下,网上很多帖子说是将传给main的参数在project-set programs' arguments-program arguments里填入就可以了。我也照着做,填入后,点击OK,再点击运行程序(绿色的箭头符号),控制台输出的是乱码。
请问这是怎么回事呢?

...全文
483 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongwenjun 2017-10-26
  • 打赏
  • 举报
回复
#include <stdio.h>

// int main(int argc, char* argv[])
int main()

{
    char* s[] = {"myexe", "abc", "123"};
    int argc = 3;

    char** argv = s;

    while (argc > 1) {
        ++argv;   // 指向 s[1];
        printf("%s\n", *argv); //用*argv
        --argc;  //(3-1)
    }

    return 0;
}
实际是这样的
fantasy408 2017-10-26
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
http://bbs.csdn.net/topics/390469280
多谢赵老师
赵4老师 2017-10-26
  • 打赏
  • 举报
回复
fantasy408 2017-10-26
  • 打赏
  • 举报
回复
引用 6 楼 hongwenjun 的回复:
#include <stdio.h>

int main(int argc, char* argv[])
{
    while (argc-- > 1) {
        printf("%s\n", *++argv);
    }
    return 0;
}
更加挖坑的写法,这个运行是正确的
对于指针数组,例如char *s[]={"abc","123"};,既然s[0
引用 6 楼 hongwenjun 的回复:
#include <stdio.h>

int main(int argc, char* argv[])
{
    while (argc-- > 1) {
        printf("%s\n", *++argv);
    }
    return 0;
}
更加挖坑的写法,这个运行是正确的
您好,“挖坑的写法”是指使用指针变量吗?
fantasy408 2017-10-26
  • 打赏
  • 举报
回复
引用 3 楼 hongwenjun 的回复:
命令行参数 如图中所示 *argv 这个指针,实际 指向 argv[0] . ++ argv后就指向了 argv[1] 楼主的代码 正确的写法应该如下面 ,不过这样写,感觉在给自己挖坑
#include <stdio.h>

int main(int argc, char* argv[])
{
    while (argc > 1) {
        ++argv;
        printf("%s\n", *argv);
        --argc;
    }
    return 0;
}
非常感谢。 现在被谭书的指针绕的云里雾里的
hongwenjun 2017-10-26
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc, char* argv[])
{
    while (argc-- > 1) {
        printf("%s\n", *++argv);
    }
    return 0;
}
更加挖坑的写法,这个运行是正确的
hongwenjun 2017-10-26
  • 打赏
  • 举报
回复



下载了电子版
教程 确实是错了, 少了 *
自信男孩 2017-10-26
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc,char *argv[])
{
    while(argc>1)
    {
        ++argv;
        printf("%s\n", *argv); //用*argv
        --argc;
    }
    return 0;
}
用*argv,注意argv的类型是char **是字符类型的的指针数组
hongwenjun 2017-10-26
  • 打赏
  • 举报
回复

命令行参数 如图中所示

*argv 这个指针,实际 指向 argv[0] . ++ argv后就指向了 argv[1]
楼主的代码 正确的写法应该如下面 ,不过这样写,感觉在给自己挖坑

#include <stdio.h>

int main(int argc, char* argv[])
{
while (argc > 1) {
++argv;
printf("%s\n", *argv);
--argc;
}
return 0;
}
hongwenjun 2017-10-26
  • 打赏
  • 举报
回复
#include<stdio.h>
int main(int argc, char* argv[])
{

    printf("You have inputed total %d argments\n", argc);
    for (int  i = 0 ; i < argc ; i++) {
        printf("arg%d : %s\n", i, argv[i]);
    }

    return 0;
}
你学的教材不行,学参数 应该要这样的代码,这样才好理解
hongwenjun 2017-10-26
  • 打赏
  • 举报
回复

printf("%s\n", argv[0]);

69,379

社区成员

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

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