C - argv 的分段错误

C - Segmentation Fault with argv

代码编译和运行都很好,除非我只指定一个命令行选项,然后它会出现段错误。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>


void printHelp()
{
    printf("Usage: fstring [ char ] [ amount ] Optional:[ outfile ]\n"
           "Example: fstring A 100 out.txt\n");
    exit(1);
}

char *f_string(const char *s, int t)
{
    int i; char *dst = malloc(t * strlen(s) + 1);
    for(i = 0; i < t; i++) {
        strcat(dst, s);
    }
    return dst;
}


int main(int argc, char *argv[])
{
    if(argc < 2) {
        printf("You need at least two arguments!\n");
        return 1;
    }

    char *res = f_string(argv[1], atoi(argv[2]));
    puts(res);
    free(res);
    return 0;
}

正如我所说,如果我给它两个参数,它就会运行,如果我给它 none 它会打印错误消息,但只给它一个会导致段错误。我不明白为什么。

argc - argument count

argv - arg's value

变化:

if(argc < 2) {

收件人:

if(argc < 3) {

在此处阅读有关命令行参数的更多信息:

http://www.cprogramming.com/tutorial/c/lesson14.html

由于argc包含传递给程序的参数数量增加1,因此测试需要if (argc < 3)

argcargv 数组的长度,其中包括程序名称 argv[0]。一个有用的助记符是 argv[argc] 始终为 NULL。)