0

アイデアは、10 個の文字列を含む配列を持つことです。

選択したオプションでメニューを動的に印刷しようとしています。ここで、文字列を配列から構造体にプルしようとしています...しかし、取得できません...文字列を構造体変数に直接割り当てると、それを読み取ることができます。

誰かがここで何がうまくいかないのか説明してください。

#include <stdio.h>
#include <stdlib.h>

    typedef struct some_numbers{
       int id;
       char *somestring[10];
       }numb;

    int main()
    {
    int i = 0;         
    numb *new_numb;

    char *arr[10]= {0};

    for(i; i<2; i++)
    {
           printf("Please enter %dth name:\n",i);
           scanf("%s",arr+i);
          //i am printing it agian to confirm that it is stored in said locations
           printf("%s\n",arr+i);
    }

    new_numb = (struct numb *)malloc(sizeof(numb)*4);

    //If i assign the string dirctly then i can print it as follow

    new_numb->somestring[0] = "MY_number";

    printf("%s\n",new_numb->somestring[0]);
       //I am trying to copy string from an arry and print it again....but not working 

    for(i=0; i<2; i++)
    {
             strcpy(new_numb->somestring[i], arr+i);
             printf("%s\n",new_numb->somestring[i]);
    }

    system("PAUSE");
    return 0;    
}
4

1 に答える 1

2

と同様に、それぞれchar *にメモリを割り当てる必要があります。arrnew_num->somestring

char * arr[10]10 個の配列を作成しましたがchar *、それぞれ ( arr[0], arr[1]) には文字列を保持するためのメモリが必要です。

new_numb->somestring配列についても同様です。

次のようなコードを変更できます

for(i; i<2; i++)
{
       printf("Please enter %dth name:\n",i);

       //allocate memory to hold string of max 100 chars, you may want to change that.
       arr[i] = malloc(sizeof(char) * 100);

       scanf("%s",arr+i);
      //i am printing it agian to confirm that it is stored in said locations
       printf("%s\n",arr+i);

}
于 2013-03-15T04:44:07.020 に答える