大学の講義でmalloc関数を学習したのですが,いまいち使い方がわからないため,どこを理解できていないのかを確認したいです.
まず,以下の「修正前のコード」では,char型のポインタaと,文字列b="cd"を用意しています.
その下で,malloc関数等を利用して,char型のアドレスをポインタaに代入しています.
aはポインタなので,a=" ~ "として,ポインタaの示す変数aに文字列を代入しています.
その後,*aの値の中にbの値が入っているかを調べて,その値のアドレスをポインタpに格納しています.
最後に,ポインタpが示す文字列を出力しています.
という流れでテストコードを作成したのですが,エラーがでてしまいます.
一応,下の修正後のコードでコンパイルした場合は,うまく動きました.
しかし,なぜaはポインタであるはずなのに,文字列を格納できたのか,という点が疑問です.
おそらく,何か根本的に勘違いをしていると思うので,正しい理解へ導いてほしいです.
C
1// 修正前のコード 2#include <stdio.h> 3#include <stdlib.h> 4#include <string.h> 5 6int main(void) { 7 char *a; 8 char b[10] = "cd"; 9 10 a = (char*)malloc(sizeof(char)); 11 *a = "abcdefgh"; 12 char *p; 13 14 p = strstr(*a, b); 15 16 printf("%s", *p); 17 18 return 0; 19}
C
1// 修正後のコード 2#include <stdio.h> 3#include <stdlib.h> 4#include <string.h> 5 6int main(void) { 7 char *a; 8 char b[10] = "cd"; 9 10 a = (char*)malloc(sizeof(char)); 11 // *a → a 文字列は*aに格納するのではないのか? 12 a = "abcdefgh"; 13 char *p; 14 15 // *a → a 16 p = strstr(a, b); 17 18 // *p → p 19 printf("%s", p); 20 21 return 0; 22}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/11 03:45
2019/12/13 01:52
2019/12/13 04:39