-5
#include<stdio.h>
#include<string.h>

#define print(x){ \
                while(*x != -1){ \
                  printf("\n %d \n",*x); \
                  x++; \
                } 

void int_copy(int* ptrA, int* ptrB, int nbr)
{
    memcpy(ptrA,ptrB,nbr);
}

int main()
{
    int stringa[40] = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, -1};
    int stringb[40];

    memset(stringb, 0, sizeof(stringb));

    int *ptr;
    int *ptr1;
    int len = 0;

    ptr = stringa;
    ptr1 = stringb;

    while(*ptr != -1)
    {
        *ptr++;
        len++;
    }

    printf("\n len : %d \n",len);

    int_copy(stringa, stringb, len);

    print(ptr1)

    return 0;
}

実行しようとしたときにエラーが発生しました。

4

3 に答える 3

3

他の人が指摘した問題に加えて、マクロ内の開き括弧と閉じ括弧の数を数えることをお勧めします。

#define print(x){ \
            while(*x != -1){ \
              printf("\n %d \n",*x); \
              x++; \
            } 
于 2013-07-11T14:53:56.063 に答える
2

を呼び出すとint_copy、 の値はlen0 になります。

また、コードint_copyが壊れており、コピーする文字数をスケーリングできません。

そのはず:

void int_copy(int* ptrA, const int* ptrB, int nbr)
{
  memcpy(ptrA, ptrB, nbr * sizeof *ptrB);
}

memcpy()は をコピーするためchar、 のサイズだけ拡大する必要がありますint

于 2013-07-11T14:29:15.463 に答える
1

あなたの問題は

void int_copy(int* ptrA,int* ptrB,int nbr){
     memcpy(ptrA,ptrB,nbr);
}

lenの の数として決定intし、 としてstringa渡しますnbr。しかし、そこには、memcpy()コピーされるバッファの長さ (バイト単位) として解釈されるため、「-1」を含めずに最初の部分のみstringaがコピーされます。stringbへの変更memcpy(ptrA,ptrB,nbr*sizeof(int))

于 2013-07-11T14:32:47.917 に答える