-5
struct PhaseShiftPin {
    int _PSPpin_index;      //PSP = Phase Shift Pin
    int _PSPvalue;
    char _PSPname[512];
};
struct PhaseShiftPin *_PhaseShiftPin[500000];
int p3int = 0;
strcpy ( _PhaseShiftPin[i]->_PSPvalue, p3int );

上記のコードは、私の完全なコードの一部です。完全なプログラムをコンパイルすると、 strcpy' が 行にあるキャストなしで整数からポインターを作成するというエラーが発生しました

strcpy ( _PhaseShiftPin[i]->_PSPvalue, p3int );

ここでの投稿を参照しましたが、 strncpy を使用しようとした後、strcpy を使用してキャストすることなく整数からポインターを作成し、投稿に示されている方法に従ってください。私はまだコンパイルに失敗しています。

4

2 に答える 2

2

strcpyこの問題には不適切です。2 つの引数を取ります。1 つ目は へのポインタcharで、2 つ目は へのポインタconst charです。次に、2 番目のポインタが指す文字列を、最初のポインタが指すメモリにコピーします。

あなたの場合、文字列をコピーしているのではなく、int をコピーしています。最後の行は次のようになります。

_PhaseShiftPin[i]->_PSPvalue = p3int;

ただし、C99 標準では、アンダースコア ('_') で始まり、その後に大文字または別のアンダースコアが続く識別子が予約されています。したがって、識別子にこのような名前を付けてはなりません。

于 2013-07-23T07:04:14.033 に答える
1

strcpy の定義を見るとわかります

char *strcpy(char *dest, const char *src);

しかし、あなた_PhaseShiftPin[i]->_PSPvalueは整数でp3intもあります。

あなたはmemcpyを使うことができます

void *memcpy(void *dest, const void *src, size_t n);

strcpy ( &(_PhaseShiftPin[i]->_PSPvalue), &(p3int), sizeof(p3int) );

または単にコメントで述べたように

_PhaseShiftPin[i]->_PSPvalue =  p3int;

にコピーしようとするp3int_PhaseShiftPin[i]->_PSPvalue

于 2013-07-23T07:02:15.713 に答える