C基本数据head命令(C Basic Head Command)

2019-09-22 07:23发布

我试图重新头部,并从Linux命令尾巴对我的编程类。 我们刚开始用C,所以我是新来分配内存和指针的想法。 我不知道为什么这是行不通的。

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

int main(int argc,char **argv){

    /* Checks if correct amount of arguements */

    if(argc != 2 || argc != 4){
        printf("Usage: %s head <file> \n Or: head <file> -n <number of characters>", argv[0]);
        exit(-1);
    }

    if(strcmp(argv[1], "-n" != 0)){
        char fileName[strlen(argv[1])] = argv[1];
    }
}

//Compile error on char fileName[strlen(argv[1])] = argv[1];

任何额外的洞察力也将是有益的。

Answer 1:

第一件事首先,您的使用不符合您的参数检查。 根据使用情况,您必须使用一个:

head <filename>
head <filename> -n <count>

换句话说, argv[1] 一直是文件名, argv[2]是一个需要被设置为一个-n ,如果有两个以上的参数。

其次,除非你想用沃拉斯(可变长度数组),你应该只设置一个指向与类似的文件名参数:

char *fileName = argv[1];

你并不需要在所有改变它(你只是路过它fopen ,大概),所以它试图使另一个副本的浪费。

此外,您if说法是错误的作为or ,它应该是一个and 。 它保证argc将要么不为2或不4,因为它不能在同一时间既。

我会喜欢的东西开始:

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

static int usage (void) {
    printf ("Usage: head <file>\n");
    printf ("   or: head <file> -n <number of characters>\n");
    return -1;
}

int main (int argc,char *argv[]) {
    char *fileName;
    int lineCount;

    // Checks if correct arguments

    if ((argc != 2) && (argc != 4)) return usage();

    if ((argc == 4) && (strcmp(argv[2], "-n" != 0)) return usage();

    // Get file spec and line count

    fileName = argv[1];

    lineCount = (argc == 2) ? 10 : atoi (argv[3]); // or strtol for purists
    if (linecount < 0) lineCount = 0;

    // Now go ahead and implement the logic for head.

}


Answer 2:

我认为这是最好写的:

char fileName[strlen(argv[1])+1];
strcpy(fileName, argv[1]);

或者(如果你不whant做字符串的副本):

char* fileName = argv[1];


文章来源: C Basic Head Command
标签: c linux tail head