【发布时间】:2018-11-25 21:27:49
【问题描述】:
我编写了这个简单的代码,它可以扫描一些数字和单词。但是,我很困惑,因为 char 总是给我一个错误。它有什么问题?
int main(int argc, char *argv[]) {
int val_pos, incr_val, max_val;
char *file_name;
char *new_name;
if (argc == 6) {
val_pos = atoi(argv[1]);
incr_val = atoi(argv[2]);
max_val = atoi(argv[3]);
file_name = argv[4];
new_name = argv[5];
} else {
printf("Command usage: %s <val_pos> <increment val> <max val> <file_name> <new name>\n", argv[0]);
printf("What is the position you want to change? Enter your number\n");
printf("X = 0 | Y = 1 | Z = 2\n");
scanf("%d", &val_pos);
printf("What is the increment value?\n");
scanf("%d", &incr_val);
printf("What is the max value/value we should terminate at?\n");
scanf("%d", &max_val);
printf("What is the pose file called?\n");
scanf("%s", &file_name);
printf("What should we call the newly generated files?\n");
scanf("%s", &new_name);
}
}
【问题讨论】:
-
“字符总是给你一个错误”是什么意思?
-
file_name和new_name最初是 未初始化的指针,用于分配argv[4]和argv[5]的地址。当您尝试scanf("%s", &file_name);时,您正在回信给argv[4]。虽然 C 标准要求argv值是可修改的——但您不能超出原始值的范围进行写入。因此,如果您输入的名称比原始名称长 - 您可能会调用 Undefined Behavior 覆盖原始 nul-terminating 字符并在原始分配范围之外写入争论。&也是错误的。 -
@DavidC.Rankin 那么如何扫描文件名?
-
声明
char file_name[512] = "";为你的新名字创建自动存储,然后scanf("%s", file_name);(不是'&',file_name已经是一个指针)根据需要调整大小。 -
@ZoeyMalkov:也许从阅读
scanf()'s documentation开始?
标签: c if-statement char int scanf