

配列にテキストファイルから取ってきた文字列をいれたいのですが、

[code]

    char memo[10], name[10], memomon[10], memoday[10], memoname[10][10];
    while(fscanf(fp, "%d %d %s %d", &mon, &day, name, &num) != EOF) {
       memomon[i] = mon;
       memoday[i] = day;
       memoname[i] = *name;
       memo[i] = num;
       i++;
    }
    
[/code]

この場合どうやったら文字列をすべてmemonameの中にいれられますか？


CC BY-SA 3.0
2014-12-25T19:34:36.350
2599
2019-11-25T04:21:23.813
2014-12-25T22:32:06.793
940
5767
question
c
C言語の配列に文字列をいれたいのですが


そもそも一時変数に代入する必要がないので、私だったら

[code]

    int i, memomon[10], memoday[10], memonum[10];
    char memoname[10][10];
    for (
        i = 0;
        i < 10 && fscanf(fp, "%d %d %9s %d", &memomon[i], &memoday[i], memoname[i], &memonum[i]) == 4;
        ++i
    );
    
[/code]

と書くと思います。もし一時変数を使用するならば、文字列に関しては `strcpy` でコピーすればいいんじゃないでしょうか。

[code]

    strcpy(memoname[i], name);
    
[/code]

**※ バッファオーバーフローを防ぐために、文字列のフォーマットには必ず`%9s` のように文字数を指定しましょう。**


CC BY-SA 3.0
2014-12-25T20:04:19.687
2600
2014-12-25T20:16:37.903
2014-12-25T20:16:37.903
940
940
2599
answer


CertaiN さんの回答の補足になりますが、最終的な答えは「C言語の配列に文字列をいれたい」ですので

[code]

    snprintf(buf, sizeof(buf), "%d", mon);
    
[/code]

snprintf を使って文字列化して下さい。


CC BY-SA 3.0
2014-12-26T00:25:13.103
2602
2014-12-27T13:14:22.103
2014-12-27T13:14:22.103
440
440
2599
answer


C言語では、 文字列(charの配列)を「=」演算子で代入(コピー)することができません。 最初は strcpy() 関数を使ってみるのが良いでしょう。


CC BY-SA 3.0
2014-12-26T01:17:54.820
2605
2014-12-26T01:17:54.820
3793
2599
answer


現在も配列を`=`で代入することはできません。  
しかし、配列を含む構造体は`=`で代入することができます。  
※K&Rの頃は使えませんでした、ANSIになってからできるようになった気がしますが、定かではありません。

* * *

以下の方法ははっきりいって配列をコピーするときの王道ではありません。

## 経験の浅い方、勉強中の方は標準ライブラリを使う方がよいです。

memcpyよりも速いのではないかと予想して性能比較したことがあります、有意な差はありませんでした。  
memcpyは非常に速かったです。※今はどうなっているか調べていません。

配列は、要素数を統一するうまい方法がありません。  
define定数を使うのが定番ですが強要できないのが難です。  
ヘッダファイルに定義する方法もありますが、ヘッダファイルに実体を定義するのは抵抗があります。  
構造体であれば配列の要素数を含めて宣言できますし、ヘッダファイルに書いて共有するのは抵抗ありません。

### 【配列を`=`で代入する例】

この例では配列s2をs1に代入しています。

（注意）char以外の配列の場合、アラインメントが保証されないため危険です。

[code]

    #include <stdio.h>
    int main(int argc, char *argv[])
    {
        char s1[1024] = {0};
        char s2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
        typedef struct {
            char s[1024];
        } Txx;
    
        *((Txx *)s1) = *((Txx *)s2);  //配列を=で代入する
    
        printf("s1 = [%s]\n", s1);
        printf("s2 = [%s]\n", s2);
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-11-24T08:37:23.343
60806
2019-11-25T04:21:23.813
2019-11-25T04:21:23.813
35558
35558
2599
answer