0

私には機能がありますvoid copy(char *temp,char input[length])。私がする必要があるのは、temp の値を入力配列にコピーすることですが、入力配列の末尾から開始します。

私は質問を正しく構成しませんでした。これが私がやろうとしていることです。

長さ 20 の入力配列を入力しました。値が「test」の一時配列を取得します。次に、input[19]=t、input[18]=e などの入力配列に temp をコピーしたいと思います。

関数を再度呼び出すと、xyz を入力配列にコピーする場合は、input[15]=x,input[14]=y,input[13]=z になります。

入力配列にすべての値を入力するまで、これを実行したいと思います。

void copy(char *temp,char input[])

これが関数定義です。

今、私たちがしなければならないことを見てみましょう。

char* temp={"abcde"};
char input[100]={};
//I want to move data from temp into input array such that
printf("%c",input[95]); // gives output as a
printf("%c",input[96]); // gives output as b

ここまで書いてきました。

char* copy(char* ptr,char data[])
{
int start=sizeof(data)/sizeof(char)-strlen(data);
int end=start-strlen(ptr);
int j=0;
int counter=0;

for(counter=start;counter>end;counter--)
{
    data[counter]=ptr[j++];   
}        
printf("%s",data);
return data;


}

この関数を呼び出すと、この方法で別のエラーが発生します。

char data[100]={};
char* temp={"abcde"};
char* output=copy(temp,data);
data=output;

data=output 行の 'char*' から 'char [100]' への割り当てに互換性のない型があります

4

2 に答える 2

2

これはすでにアルゴリズムとして実装されています。

std::reverse_copy( input, input+length, output );

関連する注記では、関数のシグネチャは次のとおりです。

void copy(char *temp,char input[length])

実際には:

void copy(char *temp,char *input)

つまり、input配列の長さは関数のシグニチャーの一部ではなく、コンパイラーによってチェックされません。サイズを追加の引数として渡すか、参照によって配列を渡すことを検討してください。さらに、ソース配列は変更されないため、const char*

于 2012-09-25T18:42:26.610 に答える
-1

文字列の場合strlenは、入力文字列のサイズを確認してから、逆にコピーすることができます。一方、それがで終わらないcharの配列である場合は'\0'、長さの新しいパラメーターを取得する必要があります。

最初のケース(あなたが言っcopy the values of temp into input arrayたので、のコンテンツをにコピーしtempinputその名前を却下します):

void copy(char *temp, char input[length])
{
    for(int i = strlen(temp) - 1; i >= 0; i--)
    {
        input[i] = temp[i];
    }
}

2番目のケース:

void copy(char *temp, char *input, size_t length)
{
    for(int i = length - 1; i >= 0; i--)
    {
        input[i] = temp[i];
    }
}

それ以外の場合は、標準ライブラリ関数を使用できますreverse_copy

于 2012-09-25T18:45:27.037 に答える