sscanf(argv[i], "%s %s", aCmd, aCnt); //这句话,他干了什么?

pan2009 2003-10-20 09:07:34
void main(int argc,char *argv[])
{
for (i = 1; i < argc; i++)
{
aCmd[0] = '\0';
aCnt[0] = '\0';
sscanf(argv[i], "%s %s", aCmd, aCnt); //这句话,他干了什么?
.............

}
}
...全文
249 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyy 2003-10-20
  • 打赏
  • 举报
回复
补充一点,刚刚看了arfi() 的发言,发现自己漏了一些情况:
linux下如果使用引号括起参数的话,如下:文件名 "123 456" "789 012"
那么:argv[1] = "123 456",aCmd="123", aCnt="456"
argv[2] = "789 012",aCmd="789", aCnt="012"
njuhuangmy 2003-10-20
  • 打赏
  • 举报
回复
第一次 赋值 就是 把 argv[1] 给 aCmd, 空的东西给 aCnt
第二次 把 argv[2] 给 aCmd, 空给 aCnt

因为 本身 argv 字符串就是 靠 空格 来 区分的, 而且, argv[1] 和 argv[2] 之间

除了 2 是 1 的后面 之外, 他们 本身 实际 上 并不在一起

所以, sscanf 读入的时候, 把 argv[i] 的内容 都给 aCmd 了
aCnt[0] 还是为 0

下例为证
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
char aCmd[50];
char aCnt[50];
for (int i = 1; i < argc; i++)
{
aCmd[0] = '\0';
aCnt[0] = '\0';
sscanf(argv[i], "%s %s", aCmd, aCnt);
puts(aCmd);
if (aCnt[0] == 0)
puts("haha");
}
return 1;
}

zhyy 2003-10-20
  • 打赏
  • 举报
回复
17809958(17809958) 误导楼主!

sscanf(argv[i], "%s %s", aCmd, aCnt); //这句话,他干了什么?
只能将argv[i】的值传给aCmd,aCnt的值永远是初始值!!

原因是:win、dos、linux/unix中总是以空格来区分多个参数的,所以argv[i]值里除了argv[0]可能有,其他的是不会有空格的
arfi 2003-10-20
  • 打赏
  • 举报
回复
我想执行的时候要你输入
可执行文件名 "123 456" "789 012"
的形式吧。
pan2009 2003-10-20
  • 打赏
  • 举报
回复
接着
是不是
argv[1] 赋值给aCmd
argv[2] 赋值给aCnt


argv[2] 赋值给aCmd
argv[3] 赋值给aCnt
17809958 2003-10-20
  • 打赏
  • 举报
回复
argv[0] 赋值给aCmd
argv[1] 赋值给aCnt
Jupin 2003-10-20
  • 打赏
  • 举报
回复
不错

69,336

社区成员

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

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