我一直在使用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;
}