C语言 命令行参数为 0 的简单程序分段错误



所以我有以下程序,它输出最大长度的参数。我想做一个例外,所以当我给它 0 个参数时,我收到一个错误,告诉我至少需要一个参数。

// Program which given an number of program parameters
// (command-line parameters, calulates the length of each one
// and writes the longest to standard output.
#include<stdio.h>
#include<string.h>
#include<stdlib.h> 

int main(int argc, char *argv[])
{
    int i;
    int maxLength = strlen(argv[1]);    
    char* maxString = argv[1]; 
   if (argc<=0)
    {
    printf("You cannot have 0 parametersn");
    exit(0);
    }
    for(i = 2; i < argc; ++i) 
    {
    // find out the length of the current argument
        int length = strlen(argv[i]);
        if (maxLength < length)
        {
            maxLength = length;
        maxString = argv[i];    
        } // if
    } // for
printf("Largest string is %sn", maxString);
} // main

这是我的代码,但由于某种原因,当我给它 0 个参数而不是消息时,我收到分段错误。

有什么想法吗?

编辑

问题后编辑:您在检查argc之前也正在使用argv[1]。这是一个错误。

如果不传递任何参数,argc将被1(因为argv[0]通常是可执行文件名称)。

所以

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
    if(argc<=1)
    {
        printf("You cannot have 0 parametersn");
        exit(255);
    } else
    {
        int i;
        int maxLength = 0;
        const char* maxString = 0;
        for(i = 1; i < argc; ++i)
        {
            // find out the length of the current argument
            int length = strlen(argv[i]);
            if(maxLength <= length)
            {
                maxLength = length;
                maxString = argv[i];
            }
        }
        printf("Largest string is %sn", maxString);
    }
} // main

如果在命令行中给出零参数argc将为 1 而不是 0。可执行文件的名称将是第一个参数。

最新更新