查看: 217|回复: 4

[讨论] 奇妙的bug

[复制链接]

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
5868
人气
156
分享
52

最佳新人活跃会员

发表于 2023-1-14 19:28:19 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
/*
* Copyright (c) StormStudio Inc.
* This is a test of argv.
*/

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

#define EXIT_CODE 0

int main(int argc, char** argv) {
	if (argc > 1) {
		if (argv[1] == "-version") {
			printf("argv_test version 1.0.0");
		}
		else if (argv[1] == "-xhz"/*小黑子*/) {
			printf("只因你太美,baby");
		}
		else if (argv[1] == "-forum") {
			system("start home.x64bbs.cn");
		}
		else if (argv[1] == "-help") {
			printf("-version\n-xhz\n-forum");
		}
		else {
			printf("Unknown command!Use -help to know the commands");
		}
	}
	printf("Type a command!");
	return EXIT_CODE;
}

输入啥命令都提示Unknown command!Use -help to know the commands
emmm
你干嘛~哎哟

0

技术

0

魅力

0

原创

初出茅庐

Rank: 2

积分
189
人气
0
分享
0
发表于 2023-1-14 22:03:11 | 显示全部楼层
这是字符串啊,不是数值额,不能直接用==,需要用字符串比较函数,比如strcmp,comparestring之类的

0

技术

0

魅力

2

原创

初出茅庐

Rank: 2

积分
238
人气
18
分享
2
发表于 2023-1-15 06:26:49 | 显示全部楼层
字符串比较不能直接使用==,argv[1] == "-version"这样不行
应该使用strcmp: strcmp((argv[1], "-version") == 0

0

技术

0

魅力

2

原创

初出茅庐

Rank: 2

积分
238
人气
18
分享
2
发表于 2023-1-15 06:35:13 | 显示全部楼层
argv的类型是char *,而“-version”的类型是const char *
"-version"是一个常量地址,argv也是地址。通常"-version"在常量区,argv在栈区。两个地址一定不相同。所以==返回总是0.
关于argc argv请参阅此贴获取更多灵感。

评分

参与人数 1经验 +5 人气 +3 收起 理由
YFSafe + 5 + 3 赞一个!

查看全部评分

2

技术

13

魅力

3

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
4471
人气
169
分享
31

最佳新人活跃会员

发表于 2023-1-15 22:09:39 | 显示全部楼层
usr 发表于 2023-1-15 06:35
argv的类型是char *,而“-version”的类型是const char *
"-version"是一个常量地址,argv也是地址。通常"- ...

很专业的
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表