在gcc 4.8.3上,optarg总是空的

时间:2014-10-01 00:06:36

标签: c gcc

我一直在使用gcc 4.7.2开发我的代码,但我还需要它在4.8.3的机器上运行。 在gcc 4.7.2(Debian [Crunchbang Linux])上,我得到以下输出:

#./executable -f fakefile -h hostname

inputFile: fakefile
Setting inputFile to optarg: fakefile.
hostname: hostname
Setting hostname to optarg: hostname.

关于gcc 4.8.3(Fedora):

inputFile: 
Setting inputFile to optarg: <garbage>.
hostname: <garbage>
Setting hostname to optarg: hostname.
Segmentation fault

以下代码供参考。我应该提一下,我实际上并不知道gcc版本中的差异是否是导致问题的原因:它似乎对我来说最有可能。

任何人都可以解释为什么我在4.8.3上获得垃圾+段错误,而不是在4.7.1上?谢谢你的帮助。

opterr = 0;
int c;
while (( c = getopt(argc, argv, "f:h:c")) != -1)
{
    switch ( c )
    {
        case 'c':
            LOG("Setting compression to TRUE.\n");
            compression = TRUE;
            break;
        case 'f':
            LOG("inputFile: %s", optarg);
            if ( optarg != NULL && strlen(optarg) < sizeof( inputFile ) )
            {
                strcpy( inputFile, optarg);
                LOG("Setting inputFile to optarg: %s.", inputFile);
            }
            break;
        case 'h':
            LOG("hostname: %s", optarg);
            if ( optarg != NULL && strlen(optarg) < sizeof( hostname ) )
            {
                strcpy( hostname, optarg);
                LOG("Setting hostname to optarg: %s.", hostname);
            }
            break;
        case '?':
            fprintf(stderr, "Unknown option %c.\n", optopt);
            print_help();

            teardown();
            return 1;
    }

0 个答案:

没有答案