【发布时间】:2020-05-01 14:47:41
【问题描述】:
我对 C 编程完全陌生。目前我正在为我的新课程 IT 安全做准备。在稍早的考试中,我发现了一项我无法解决的任务。任务是德语的。原则上,它是关于发现严重错误。
没有写传递的参数长什么样。
1) 我的意思是你不应该使用strcpy,因为它没有边界检查。
2) 如果要存储 10 个字符 (\0),则不应使用 char[10]。应该是 char[11]。
是否可以通过 printf(argv[1]) 命令读取地址或写入某事?
我想再次提一下,你个人在这里帮助我,而不是帮助在大学里收集积分。
#include <stdio.h>
int main(int argc, char *argv[])
{
char code[10];
if(argc != 2) return 1;
printf(argv[1]);
strcpy(code, "9999999999");
for(int i = 0; i < 10; ++i){
code[i] -= argv[1][i] % 10;
}
printf(", %s\n", code);
return 0;
}
【问题讨论】:
-
复制代码到问题中。
-
以
clang -Weverything为例进行编译。 -
对于未来您可能会在此处发布的问题:请不要发布文字图片,将文字作为文字发布。如果你需要重新输入,那就去做吧。
-
@FiddlingBits
code被(错误地)初始化为strcpy。 -
而且使用
strcpy并没有什么问题,只要确保目标缓冲区足够大。