【发布时间】:2023-02-06 16:33:27
【问题描述】:
当我将 debug50 Caeser 1024 输入我的代码空间时,argc 显示为 2,这是正确的,但 argv 显示为 0x7ffd87a68798 as shown here 和 idk 为什么它不显示为 1024?
这是我第一次使用命令行参数,所以请提供任何帮助。
到目前为止,这是我的代码也希望对我的功能进行任何检查,我认为这也是错误的:/
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
bool only_digit(string argv[1]);
int main(int argc, string argv[])
{
//Make sure program was run with command line argument (argc)
if (argc == 2){
return 0;
}
else{
printf("Usage: ./caesar key\n");
return 1;
}
}
//Make sure every character in argv[1] is a number
bool only_digit(string argv[1]){
if (isdigit((*argv[1]))){
return true;
}
else{
return false;
}
}
【问题讨论】:
-
如果您使用一个参数调用程序,则条件
argc == 2为真,程序立即返回。 -
而
only_digit函数没有意义,为什么要取一个大批字符串作为参数,如果它应该检查一个字符串?检查所有字符的循环在哪里? -
“为什么它不显示为 1024?”为什么会这样?它是一个指针数组。您正在查看第一个指针的地址,而不是它指向的字符串。
-
CS50 课程 IMO 的主要问题之一是它隐藏了 C 中字符串的真正含义。 type
string实际上是char *的别名。它是指针(到字符串中的第一个字符)。 -
谢谢你@Gerhardh 我完全没有意识到它是指针的地址而不是一个字符串,再次感谢。
标签: c parameters command-line-arguments cs50 argv