【问题标题】:Command line argv not showing up during debugging (using github codespace)调试期间未显示命令行 argv(使用 github codespace)
【发布时间】: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 中字符串的真正含义。 typestring实际上是char *的别名。它是指针(到字符串中的第一个字符)。
  • 谢谢你@Gerhardh 我完全没有意识到它是指针的地址而不是一个字符串,再次感谢。

标签: c parameters command-line-arguments cs50 argv


【解决方案1】:

你应该检查是否没有。参数与您首先期望的不匹配,如果不匹配则返回。

此外,您应该学习如何使用参数正确声明/定义函数。 argv[1] 表示您需要一个大小为 1 的字符串数组。

此外,您的函数可以是单个返回语句。

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

bool only_digit(string s);

int main(int argc, string argv[]) {
    // Make sure program was run with command line argument (argc)

    if (argc != 2)  {
        printf("Usage: ./caesar key
");
        return 1;
    }
    printf("%d
", only_digit(argv[1]));
}
// Make sure every character in argv[1] is a number

bool only_digit(string s) {
    return isdigit(*s);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多