6

文字配列がありますm char Input[200];

現在の入力には文字列「abc.txt」があります。

const char * を厳密に必要とするメソッドがあります。入力配列を const char * に変換するにはどうすればよいですか。

キャストして渡そうとしましたが、GDBを使用すると、入力の残りの192スロットがゴミでいっぱいになっている(または空になっている)ため、関数によって受け入れられない気がします。文字列リテラル「a.txt」を関数に渡すと、機能します。この時点で、入力配列から塗りつぶされた要素を抽出し、それを const char * に変換したいと思います。

ユーザーからファイル名として入力を取得しているので、入力を格納するために char 配列を使用しました。

   int main()
    {
    char *name;

    char input[1024];
    strcpy(input, argv[1]);

    name = input;

    sys_open(input, "O_RDWR", 00700);


    }
4

2 に答える 2

11

直接渡すことができるはずです。char[] は const char * にキャストできますが、その逆はできません。

gdb にすべてのガベージが表示されるのは、配列が事前に初期化されていないため、何も含まれていないためです。そのため、以前にそこにあったガベージが表示されているだけです。文字列が null で終了している限り、問題ありません。

于 2013-02-09T06:06:56.030 に答える
2

配列は自然にポインターに減衰するため、問題はありません。

「ガベージ」の問題は、それが配列が配置されているメモリ内にあるためです。注意すべき重要なことは、文字列が文字で終了していること'\0'です。

したがって、文字列"abc.txt"は次のようになります

'a', 'b', 'c', '.', 't', 'x', 't', '\0'

すべての文字列関数は'\0'.

文字列を含む配列を使用している場合はstrlen、長さを取得するために を使用することが重要です。演算子は含まれる文字列ではなく、配列全体の長さを与えるためですsizeofsizeof

于 2013-02-09T06:08:38.373 に答える