第一个c语言问题,求高手指点~

iuKa 发布于 2012/11/24 11:34
阅读 417
收藏 0
最近自学c中,写了段测试代码。但运行总是报错:segmentation fault! 希望高手指点~
/*
 * echo
*/

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main(int argc, char* argv[])
{
    int nflag = 0;  //判断-n参数标识

    if(*++argv && !strcmp(*argv, "-n") {
        nflag = 0;
    } else {
        nflag = 1;
        ++argv;
    }

    while(*argv) {
        printf("%s", *argv);
        if(*++argv) {
            printf(" ");
        } else {
            //do continue
        }
    }

    //是否换行
    if(nflag) {
        printf("\n")
    } else {
        //do nothing
    }
    exit(0);
}
加载中
0
小鱼梦想
小鱼梦想

argv遍历,超出了argc的范围。

少帮主
少帮主
回复 @iu凯 : 数组没有这个约定
iuKa
iuKa
谢谢你的回答!:)你的意思是我遍历argv数组越界了。不过我认为argv数组最后一个是null,所以应该不会越界才是。thx
0
iuKa
iuKa
上面代码写错了,13line最后少了一个')'。还有17line的'++argv'应该放在14行之后。今天早上网页码的伤不起...
0
Jooooooker
Jooooooker
17行++之后可能就为NULL了 
0
Yu_Yang
Yu_Yang
要学会用gdb调试,直接run就会在段错误的代码上停下来。
iuKa
iuKa
恩恩,学习中
0
iuKa
iuKa
感谢楼上的各位大侠。昨天在unbuntu11.04上运行有错,今天在自己电脑上的12成功运行。好囧...
iuKa
iuKa
是啊,对字符指针字符串指针总是混淆了...
少帮主
少帮主
从你的代码中可以看出你对char* 和 char的理解有问题,先学下基础吧
0
echor
echor

好恶心的代码

居然还说“成功运行”,,

0
中山野鬼
中山野鬼

*++argv 这种写法我写C16年了。也不用。你牛。最多我是*p++ = *b++;而已。

if(*++argv && !strcmp(*argv, "-n")
没有必要的。

你直接

if(!strcmp(argv[1], "-n")
就可以了。argv[1] == 0 时,一样比较表示有差异。前面判断没必要。另外,argv[1]不是更清晰吗?


iuKa
iuKa
回复 @戊己杏黄旗 : thx,因为以前看到过argv[argc]的值必须是一个空指针。不过这样子确实很不安全哈,以后还是老老实实的用[]和argc来遍历...囧...
echor
echor
这些代码还是很典型,使用指针不小心就会这样,不当当是风格问题,本质问题是 指针隐含移位都不知道,,会指向不想指向的地方去了,幸好后面是读一下,写就要杯具了
中山野鬼
中山野鬼
回复 @iu凯 : 骨灰谈不上。算是明白事理的级别吧。哈。
iuKa
iuKa
16年?!!!算是骨灰级么... = =!确实一语中的哈,仔细想前面的判断多余了...不过我写++argv是为了保持上下风文风格一致哈,Thx!
0
尤文冬
尤文冬

引用了系统保护的地址

0
尤文冬
尤文冬
还有你不可能肯定越界后*argv  是什么值
0
泡不烂的凉粉
泡不烂的凉粉
我真的记不住 指针操作符 和 ++ 运算符 谁的优先级高.
返回顶部
顶部