2016-08-16 28 views
0

別の配列に配列を割り当てたい。両方の配列は、同じサイズを持っていない:Cで別の文字配列にchar配列を割り当てる方法

char array1[7] = "abcdefg"; 
char array2[3]; 

どのように私は、アレイ2に配列1から3(3)の値を割り当てることができますか?私は試した:

array2[3] = {array1[2], array1[3], array1[4]}; 

を、次のエラーメッセージとなるi'd:配列が同じサイズを有する場合

expected expression before ´{´token 

私は(memcpy())を使用することができることを知っています。

私はVHDLとVerilogでより多くの経験があります。 VHDLでは、次のようになります。

array2 := arry1(2 upto 4); 

しかし、私はCプログラミングの経験が豊富です。

+0

サイズが異なる場合に 'memcpy'を使用すると何が問題になりますか? – Kevin

+1

領域が連続していて、重複していない場合、 'memcpy()'を使うことができます: 'memcpy(array2、arrray1 + 2,3);' – MikeCAT

+0

VHDLがそのことを意味するわけではないからです。タグを削除しました。 – Olaf

答えて

0

あなたは、実行時にコピーを行いたい場合は、memcpy()を使用することができ、次のいずれか

memcpy(array2, array1 + 2, 3); 

またはちょうどあなた自身のコピーループを書く:によっては、

for (int i = 0; i < 3; i++) array2[i] = array1[i + 2]; 

注意をCコンパイラと最適化設定を使用する場合、これらの2つのメソッドは同じバイナリにコンパイルされることもあれば、コンパイルされないこともあります。具体的には、最適化コンパイラでは、memcpy()をインライン化し、コンパイラが最も効率的であると考える内容に応じて、明示的なコピーループをmemcpy()の呼び出しに変換することが可能です。

配列がchar以外のタイプの場合、memcpy()の長さ引数に要素型のサイズをバイト単位で乗算する必要があることにも注意してください。ただし、C標準では、sizeof(char) == 1が保証されています。

2

あなたは

ちょうどこれを行う行うようにあなたがあなたのarray2[3]、あなたがコピーできる値を初期化、

char array1[7] = "abcdefg"; 
char array2[3] = {array1[2], array1[3], array1[4]}; 
+0

'char array2 [] = {array1 [2]、array1 [3]、array1 [4]};で十分です。 –

+0

'array2 []'の代わりに 'array2 [3]'のように定義すると、 – Berkay92

+2

で十分ではありません。*文字配列が必要ならば十分でしょう。もし 'string'が必要な場合は、 * nul-terminator *のスペース。あなたの答えは配列のためにうまくいきました。*要素数を空白にしておき、コンパイラがそれを設定できることを指摘していました。結論としては、 'array2'の使い方によって決まります。 –

0

これは

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

int main() { 
    char array1[7] = "abcdefg"; 
    char array2[3]; 
    strncpy(&array2[0],&array1[2],3); 
    printf("%s\n",array2); 
} 
のWindows 7上で動作しますありがとう

出力:

CDE

1

あなたは本当に、あなたがヘッダ<string.h>で宣言さеру標準機能strncpyを使用することができます割り当てを意味します。ここで

は実証プログラムは、その出力が

cde 

あなたは、配列array2が文字列が含まれているであろうとする場合は、その大きさが4に等しくなければならないことを考慮してくださいです

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

int main(void) 
{ 
    char array1[7] = "abcdefg"; 
    char array2[4]; 
    size_t n = 3; 

    strncpy(array2, array1 + 2, n); 
    array2[n] = '\0'; 

    puts(array2); 

    return 0; 
} 

です3つのコピーされた文字と終了ゼロを格納します。

+0

'strncpy()'がヌルバイトに遭遇すれば 'strncpy()'は停止することに注意してください。これは、(この答えが想定されているように)ヌル終了文字列で作業している場合に必要ですが、バイナリデータ(ヌルバイトを有効な要素として含むかもしれません)をコピーしようとするなら、 'memcpy () '代わりに。 –

関連する問題