• 締切済み

c言語のポインタ配列

下記のようなポインタ配列が合った場合、 char *mnthp[4] = { "January", "February", "March", "April" }; Februaryに別の文字列を代入したいのですが、どうすればよいのでしょうか?

みんなの回答

  • chie65535
  • ベストアンサー率43% (8530/19388)
回答No.3

mnthp[1]="別の文字列"; とすれば良い。

回答No.2

const じゃないので代入できますよ。 #include <stdio.h> #include <stdlib.h> int main(void) { char *c[] = {"jan", "feb", "mar", "apr", NULL}; for (int i = 0; c[i] != NULL; i++) { printf("%s\n", c[i]); } c[1] = "a"; for (int i = 0; c[i] != NULL; i++) { printf("%s\n", c[i]); } }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「Februaryに別の文字列を代入」とは, どのような操作を意味しているのですか? 結果としてどうなっていればいいのですか?

関連するQ&A

  • C言語のポインタと配列

    どうにも理解しようとしていますが全体像が理解できないので、わかっていることわからないことまとめていくのでバンバン指摘してくださるとうれしいです。 1.配列の宣言には int a[]; a[] = {1,2,3}ですが、コンピュータは{"1","2","3"}の部分の数を数えて[]に代入しているので、 int [][3] = {{1,2,3},{4,5,6}}のような配列を作ったとき[][3]の部分の左側の数字も勝手に代入している。 この時なぜ3が勝手に代入されないかがわからない 2.数字とメモリ int s = {1,2,3}をメモリ的に表現すると、123の順に並んでいる。s[1]=2 int s[][2] = {{1,2,3},{4,5,6}}をメモリ的に表現すると123456に並んでいる。s[1][1]= 5 ここまで文字列以外の配列は添え字だけで管理されている。 3.文字列とポインタ char s[] = "abc"とするとメモリ的にはabc\0であり、[]には4が代入され、s[1]はb自身を指す。 char *s = "abc"をメモリで表すとabc\0であり、\0が来るまでを文字列と認識する。 sは&s[0]とも表現できるように、最初のアドレスを指し示している。 char *s[]= {"abc","def"}をメモリ的に表現するとabc\0def\0であり、[]には2がコンピュータにより判断されて代入される。\0までを文字列として表現しようとする。s [1] は"def"の最初のアドレスを指し示すが、s[1][1]とするとe自身を指すようになる。この時、s[1] = &s[1][0]と表現することは可能であると考えられる。 文字列を直接さす場合でも、ポインタで表現する場合でも、\0が要素の最後に来るのでしょうか? また、{{"abc","def"},{"ghi","jkl"}}を文字列で直接表す場合は char s[2][2] = {{"abc","def"},{"ghi","jkl"}}; となるかと思いますが char *s[2][2] = {{"abc","def"},{"ghi","jkl"}}; とするとs[1][1]でghiの最初のアドレスを、s[1][1][0]でg自身を表せるようになるのでしょうか?

  • ポインタのポインタの必要性

    書物によるとポインタのポインタの使用例として「ポインタの配列」はポインタを使ってアクセスすることができます。」[*]とありますが、どうしてポインタのポインタが必要なのかがいまいちピンと来ません。 どういう場合なのかを知りたく思っています。 [*]サンプルスクリプト ===================================================== char *mnthp[3] = {/* ポインタの配列の宣言 */ "January", "February", "March" }; char **p1;/* 「ポインタのポインタ」の宣言 */ int i, j; p1=mnthp;/* 「ポインタのポインタ」にポインタの配列 */ /* の先頭番地を設定 */ /***** 例1 *****/ for (i = 0; i < 3; i++) {/* 「ポインタのポインタ」の値を変えずに */ printf("%s\n", *(p1 + i));/* 相対的に文字列を出力 */ } ==> このようなことをしなくとも printf("%s", mnthp[i]); で値を参照出来ると思われる。 ===================================================== [*] http://www9.plala.or.jp/sgwr-t/c/sec10-4.html 宜しくお願い致します。

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • ポインタ配列について

    下のプログラムは、ポインタ変数の配列のプログラムです。 このプログラムを、月の順番を入れ替えて出力するプログラムに変更するにはどのようにすれば良いか分かる方いましたら、是非教えてください。例えば、JANUARYとMARCHを入れ替えて出力するプログラムなどです。 #include<stdio.h> void main() { char *p[] = {"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE", "JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"}; int i,j; *p[0]=*p[2]; *p[0]=*p[2]; for(i = 0;i < 12; ++i){ printf("%2d 月:%s\n",i+1,p[i]); } for(i = 0;i < 12; ++i){ j = -1; do{ ++j; printf("%4x ",p[i]+j); } while (*(p[i]+j) != '\0'); printf("\n"); j = -1; do{ ++j; printf(" %c ",*(p[i]+j)); }while (*(p[i]+j) != '\0'); printf("\n"); } }

  • 配列とポインタについて

    #include <stdio.h> int main() { char x[3]; char *y; x[0]='a'; x[1]='b'; x[2]='\0'; y="abc"; printf("xの値は%s\n",x); printf("yの値は%s\n",y); } 通常の配列宣言では、このままだと文字列をまとめて 代入できないのに対して、ポインタ変数ならまとめて代入することができるのは何故ですか?そういう仕組みだと言われてしまえば、それまでなんですが・・・

  • C言語のポインタと配列について

    下のコードについて2つ質問があります。 (1) char *p; p = str; ならわかるのですが、なぜ型が違う char *p = str; のような代入がOKなのでしょうか。文字列をコピーするときの   *p = *str; と比較して、とても違和感があります。  str は引数で受けた文字列の先頭アドレス。 (2)   char *str;   str = " 1 23 4 5"; と   char str[] = " 1 23 4 5"; との違いがよくわかりません。 #include <stdio.h> #include <ctype.h> void TrimSpace(char *str) {   char *p = str;        // (1)型が違うのになぜこんな代入をするのか?      while (*str != '\0') {     if ( !isspace(*str) ) {       *p = *str;      // この代入は自然       p++;     }     str++;   }   *p = '\0'; } int main(void) {      //char *str;   //str = " 1 23 4 5";     (2)これでは空白を詰めた後の文字列が表示されないのはなぜか?      char str[] = " 1 23 4 5"; //これで OK   printf("空白を詰める前:\"%s\"\n", str);   TrimSpace(str);   printf("空白を詰めた後:\"%s\"\n", str);   return 0; }

  • c言語でポインタ変数を用いた配列の反転操作

    c言語でポインタ変数を用いた配列の反転操作を行いたいのですが、文字列の反転の仕方が分かりません。流れとしては、文字列の長さを調べてから文字列を反転して表示するという感じです。どうか教えてください。また、その他問題点があればご指摘よろしくお願いします。 #include <stdio.h> int strlength(char *str) { /* 文字列の長さを調べる /* int length = 0; while (*str++ != '\0'){ length++; } return length; } int main(void) { /*配列strSrc[]の文字列を逆にして配列strDst[]に格納する */ char strSrc[] = "reverse this"; char *pC; char strDst[] = "01234567890123456789"; char *pD; int length; printf( "%s\n", strSrc ); /* この部分が分かりません */ printf("%s\n", strDst ) ; return( 0 ); }

  • C言語について教えてください。

    #include <string.h> #include <stdio.h> void print_all_char(char *str) { while(*str! = '\0') { printf("%c\n", *str); str++; } } int main(void) { char astr[5]; char *pstr; strcpy(astr, "ABCD"); pstr = "EFGHI"; puts("「配列で実現する文字列」を表示する"); puts(astr); puts("「配列で実現する文字列」のすべての文字を表示する"); print_all_char(astr); puts("「ポインタで実現する文字列」を表示する"); puts(pstr); puts("「ポインタで実現する文字列」のすべての文字を表示する"); print_all_char(pstr); return 0; } 自分でつくった上のプログラムではエラーが発生します。 なぜだか分かりません。教えてください。 ちなみに、実行結果は 「配列で実現する文字列」を表示する ABCD 「配列で実現する文字列」のすべての文字を表示する A B C D 「ポインタで実現する文字列」を表示する EFGHI 「ポインタで実現する文字列」のすべての文字を表示する E F G H I のようにしたいです。 よろしくお願いします。

  • ポインタ配列のプログラムについて

    ポインタ変数の配列のプログラム #include<stdio.h> void main() { char *p[] = {"JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE", "JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"}; int i,j; *p[0]=*p[2]; *p[0]=*p[2]; for(i = 0;i < 12; ++i){ printf("%2d 月:%s\n",i+1,p[i]); } for(i = 0;i < 12; ++i){ j = -1; do{ ++j; printf("%4x ",p[i]+j); } while (*(p[i]+j) != '\0'); printf("\n"); j = -1; do{ ++j; printf(" %c ",*(p[i]+j)); }while (*(p[i]+j) != '\0'); printf("\n"); } } について、このプログラムを最も大きい値(ASCIIの文字コードが最も大きい値)を出力するプログラムに変更したいのですが、ASCIIの文字コードが何なのかよく分かりません。分かる方いましたら教えてください。よろしくお願いします。

  • C/C++等で1次元配列を2次元配列に代入する方法

    凄く簡単な事だと思うのですが分からないので質問させて下さい。 例えば、 char a[10][20] ; char b[20] = "代入したいデータ" ; という配列がある場合、このa[0]の行にbの文字列を入れるにはどうしたら良いのでしょうか。 よろしければ回答をよろしくお願い致します。