1

我不确定我在哪里失踪。我想从命令行捕获一些字符。我正在使用 getopt 但不确定如何从 optarg 复制。请帮助我,我不太确定 c 中的字符/字符串处理。

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

main(int argc , char *argv[]) {
    char *file;
    int opt;
    while ( ( opt = getopt(argc, argv, "f:") ) != -1 ){
    switch(opt){
        case 'f':
        file=(char *) malloc(2);
        strcpy(file,optarg);
        printf("\nValue of file is %c\n",file);
    break;
    default :
    return(1);
    }
}
return(0);
}
4

1 回答 1

5

要修复@claptrap 建议的错误,请替换:

file=(char *) malloc(2);
strcpy(file,optarg);

更安全:

file = strdup(optarg);

无论长度如何,它都会自动为您分配和复制字符串。您已经包含在 string.h 中定义的 strdup 。

使用文件字符串后,应使用以下命令将其从内存中释放:

free(file);

strdup 联机帮助页。还要检查strncpy函数,它比 strcpy 更安全,因为它知道在溢出之前可以将多少个字符复制到目标缓冲区中。

于 2013-07-21T20:40:47.610 回答