9

ここで私が理解できないことを誰かに説明してもらえますか?

引数を「文字列」として渡そうとしています(cには文字列がないことはわかっています)。これにより、後でその文字列を他の関数で使用できるようになります。たとえば、渡す必要があるファイル名です。しかし、なぜそれを受け入れないのか、どのタイプにするべきなのかわかりません

#include <stdio.h>

int main ( int argc, char *argv[] )
{
    char *array= argv[0];
    foo(*array);
}

void foo( char *array) 
// notice the return type - it's a pointer
{
    printf(array);
}

どうもありがとう!

4

3 に答える 3

18

次のように関数を呼び出す必要があります。

foo(array);

あなたがしているのはchar、文字列の最初の文字である を返すポインターを逆参照することです。

呼び出しprintfも次のようになります。

printf("%s", array);

修正されたコード全体は次のようになります。

#include <stdio.h>

void foo(char *array)
{
    printf("%s", array);
}

int main ( int argc, char *argv[] )
{
    // TODO:  make sure argv[1] exists
    char *array= argv[1];
    foo(array);
}
于 2012-07-30T01:41:44.383 に答える
5

と言うときfoo (*array)、配列を最初の要素へのポインターに減衰させて、その要素を逆参照して最初の文字を与えます。それが関数に渡そうとしているものです。アスタリスクを省略arrayして、必要なポインターに減衰するように渡します。

printfもう1つの問題は、正しく使用していないことです。まずはこちらを参考に。コンパイラには伝える方法がないため、次に期待する引数のタイプをコンパイラに伝えるトークンの文字列を渡す必要があります。あなたの場合、文字列には"%s"を期待するように指示するために含まれ、その引数としてchar *渡します。arraychar *

printf ("The string is %s", array);
于 2012-07-30T01:42:06.483 に答える