1

文字列から複数の文字を抽出して別の文字列に割り当てる関数を作成しようとしています。

コード:

// Problem 10.4
// String extraction function

#include <stdio.h>

void substring (char source[], int start, int count, char result[])
{
    int i;

    for (i = 0; i <= count; ++i) {
        result[i] = source[start];
    }

    result[i+1] = '\0';
}

int main (void)
{
    void substring (char source[], int start, int count, char result[]);
    char source[] = "character", result[80];
    int start, count;

    substring(source[], 4, 3, result[]);

    printf("%s\n", result);

    return 0;

}

Xcodeは、その行が私に言っている

substring(source[], 4, 3, result[]);

「式を期待している」ため、コンパイルできません。

関数が値を返さないので混乱しています (関数自体の中で文字列の割り当てを行っており、文字列であるため、ポインターが関数に渡されているという意味ではありませんか?その場合、それは文字列自体が変更され、ローカル コピーではありませんか? 元の文字列が変更されている場合、なぜ値を返さなければならないのでしょうか?)

問題が何であるかは完全にはわかりませんが、関数へのポインターを構文的に渡していないという事実と関係があると思われます。

あなたが提供できる洞察を前もって感謝します。

4

3 に答える 3

3

これは配列を関数に渡す方法ではありません。

source[] を使用していますが、この '[]' は必要ありません。

C では、配列は参照として渡されます。配列 source[] (fun(source)) を渡すと、ポインターの場合と同様に、そのベース アドレスが関数に渡されます。

substring(source, 4, 3, result);

また、上記の呼び出しを呼び出すと、コードは「aaaa」になります。ループ内で start 変数をインクリメントする必要があります。start=4 を意味する場合、index は 0 から始まることを忘れないでください。5 番目の文字 'a' から始まり、結果は "acte" になります。

コード:

    // Problem 10.4
// String extraction function

#include <stdio.h>

void substring (char source[], int start, int count, char result[])
{
    int i;

    for (i = 0; i <= count; ++i) {
        result[i] = source[start++];
    }

    result[i+1] = '\0';
}

int main (void)
{
    void substring (char source[], int start, int count, char result[]);
    char source[] = "character", result[80];
    int start, count;

    substring(source, 4, 3, result);

    printf("%s\n", result);

    return 0;

}

ではごきげんよう...

于 2013-05-25T15:38:51.897 に答える