【问题标题】:Printing out an error message in terminal在终端打印出错误消息
【发布时间】:2013-11-25 10:20:45
【问题描述】:

我正在开发一个程序来确定一组值的模式,例如 (3 4 2 3 3) 应该打印出“3”。问题是程序必须接收要执行的数学函数的选项及其参数作为主函数中的参数,因此没有用户输入。一切都必须插入命令行并使用指针进行检查。我的程序可以工作,除了例如说用户进入(模式)但之后没有输入任何值。这应该会打印一条消息,只是说“错误”并且程序结束。但是它不会打印

Johns-MacBook-Pro-2:AdvanceCalc jvdamore$ ./a.out 模式 分段错误:11

什么时候打印

Johns-MacBook-Pro-2:AdvanceCalc jvdamore$ ./a.out 模式错误

下面是我的代码。所以我的问题是我的 if 语句 strcmp(p[2], "") == 0 是否可以产生所需的错误消息?还是我做错了什么?

int main(int n, char **p)
{
int i, x, A[100];


if (strcmp(p[1], "mode")==0){

    if (strcmp(p[2], "") == 0){
        printf("ERROR");
    return -1;
}
        for(i=2;i<n;i++){

                if (sscanf(p[i], "%d", &x) != 1) {
                        printf("ERROR");
                        return -1;
                    }
                if (x<1 || x>30){
                        printf("ERROR");
                        return-2;
                    }

                A[i-2]= x;

            }
            find_mode(A, n-2);

        }

【问题讨论】:

  • strtolsscanf 使用起来更简单(也更安全)。

标签: c function command-line terminal strcmp


【解决方案1】:

不是用 strcmp 将字符串与"" 进行比较,您需要查看它是否为 NULL。 strcmp( NULL, "" ) 效果不好,你应该这样做:

if( p[2] == NULL ) 

(嗯,真的,你应该重命名变量argv,还有其他几个问题,但这是主要问题。请确保在引用p[2]之前检查p[1]不为NULL)

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2020-06-08
    • 2011-05-05
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多