2017-12-08 8 views
3

私はコマンドラインから文字を格納するためにargvを使っていました。そして私がちょうど私が#を入力すると、私は文字の代わりにヌルを得たことに気づいた#。なぜこうなった?argvで文字#がヌルな理由

#include <stdio.h> 

int main(int argc,char *argv[]) 
{ 
    printf("%c",argv[1][0]); 
} 

上記のコードは、セグメンテーション障害を返し#以外の任意の文字、(コアダンプ)で正常に動作します。

+2

私はそれがシェル固有のだと思います。 –

+4

これはあなたのシェルのコメント文字です。 – SLaks

+0

OSの質問です.OKVCでOKです。 –

答えて

8

#は、シェルへのコメントの開始を示しているため、プログラムには決して行きません。その結果、argvは1つの要素、つまりargv[0]しか持たないため、argv[1]にアクセスすると配列の最後が読み取られます。これにより、undefined behaviorが呼び出されます。この場合、クラッシュが発生します。

シェルは、あなたのプログラムにこの特殊文字をパスするためには、あなたがそれを引用する必要があります。

./myprogram "#" 
関連する問題