在此 if 语句中我要检查什么?

What do I check for in this if statement?

我正在使用 sscanf 读取用户输入并保存到多个输出。据我了解,如果我有 sscanf(iput, %s %s %s %s, arr[0], arr[1], arr[2], arr[3]) 我最多可以有 4 个项目输入,但不需要 4;这意味着我可以只放两个 arr[2] 和 arr[3] 就没有价值了。但是,我认为我不理解某些东西,因为后来当我检查 arr[2]/arr[3] 的值时它们不为空,当时我认为字符串只是用 \0 初始化的。请查看我的代码并告诉我我猜 if 语句应该检查什么。

printf("Enter a command: ");
        char input[20];
        char line[5][20];
        fgets(input, 20, stdin);
        sscanf(input, "%s %s %s %s %s", line[0], line[1], line[2], line[3], line[4]);
....

else {
            int status;
            if(line[4] != NULL) {
                char *args[6];
                args[0] = line[0];
                args[1] = line[1];  
                args[2] = line[2];
                args[3] = line[3];
                args[4] = line[4]; 
                args[5] = NULL;
            if ( fork() == 0 ) {
                execv( args[0], args ); // child: call execv with the path and the args
            }
            else {
                wait( &status );  
            }    

scanf 将尝试获取您要求的所有内容。你要 5 个,它会尝试得到 5 个。

sscanf(input, "%19s %19s %19s %19s %19s", line[0], line[1], line[2], line[3], line[4]);

如果没有规范,它会占用用户提交的尽可能多的字符,从而导致缓冲区溢出。坏主意。

我会一次接受一个论点,或者把它作为一个整体。

使用 Jerry Jeremiah 所说的评论,我没有将声明更改为指针,而是将 if 语句中的行 [x] 更改为指针并检查 NULL。