Windows で実験コードを作成していたら、表示がおかしくなりました。
C
1#include<stdio.h> 2#include<stdlib.h> 3#include <string.h> 4#define str "you will make me happy" 5 6int main() { 7 int* p = NULL; 8 long i = 0; 9 p = (int *)calloc(1, sizeof(int)); // sizeof(int)の大きさを1個作る. 10 11 char* q = (char *)malloc(sizeof(char) * (strlen(str))); 12 13 if (p && q) { 14 *p = 100; 15 for (i = 0; i < strlen(str); i++) 16 q[i] = str[i]; 17 printf("Succeed!!%d : %s : %d", *p, q, strlen(str)); 18 free(p); 19 free(q); 20 } 21 else 22 printf("failed"); 23 return 0; 24} 25
Succeed!!100 : you will make me happy86・モT・ : 22
という風に文字化けしてしまいます。
mallocのところをcalloc()でやるとうまくいきました。
このコードどこがおかしいのでしょうか??
ダメな部分の指摘をお願いします。
ちなみに、for文を以下のようにしたら、化けなくなりました。
C
1for (i = 0; i <= strlen(str); i++) 2 q[i] = str[i];
それから、文字列を短いとうまくいきます。
長くするダメになります。
C
1#define str "HAPPY"
なぜですか??
配列イメージだと一番最初のコードでよさそうですが・・・・
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/19 11:35 編集
2017/01/19 11:55
2017/01/19 12:02
2017/01/19 12:09
2017/01/19 12:15
2017/01/19 13:28
2017/01/20 08:25