这两个命令行之间有什么区别? (段错误)

时间:2010-09-10 04:56:17

标签: c linux ubuntu segmentation-fault shared-memory

我编写了一个映射到共享内存位置的代码,以便第一个程序打开一个共享内存块并在其中存储一些数据。第二个程序读取共享数据。

两个命令行之间的区别是什么:

1

 if(argc<2)
 {
     printf("USAGE:%s text-to-share\n",argv[0]);
 }

如果我在没有第二个参数的情况下运行它,这段代码会给我一个分段错误。 但是,当我输入一些数据时,它可以正常工作。

2

 if(argc<2)
    return printf("USAGE:%s text-to-share\n",argv[0]);

这个符合我的目的。

但我不明白两者之间的区别。 我是新手。对我而言,两者是相同的,因为理想情况下它们应该具有相同的输出。 请帮助!

2 个答案:

答案 0 :(得分:3)

这两个显然相同:

printf("USAGE:%s text-to-share\n",argv[0]);        // From example 1
return printf("USAGE:%s text-to-share\n",argv[0]); // From example 2

第二行有第一行没有:return语句。

答案 1 :(得分:1)

为什么第一个语句会给你分段错误,在C语言中你正在执行的程序名称,所以它应该是绝对正常的。我能够正确执行这个测试用例

int main(int argc,char ** argv){
    if(argc<2)
     {
         printf("USAGE:%s text-to-share\n",argv[0]);
     }
    return 0;
 }

输出:

USAGE:./prog text-to-share

除了你在此之前执行的代码中做错了。