C言語のポインターに詰まっています。


下記の結果で、文字化けをする。

[code]

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
    char *in="abc";
    char *out;
    while(*out++ = *in++);
    printf("%s\n",out);
    return 1;
    }
    
[/code]




2つ問題があります。

  1. 書き込む先のメモリが確保されておらず、`out`が初期化されていませんので、不明の場所に書き込むと，最悪プログラムが異常終了します。
  2. 結果を表示するときの`out`が、文字終端の次を指しているので、そこにどんなデータがあるか予測できませんので、期待した結果が表示されません。

1の問題はメモリを確保してそのアドレスを`out`にセットします。

例：

[code]

    char buf[10];
    out = buf;
    
[/code]

2の問題は、表示する際、メモリの先頭アドレスを`printf`に渡します。

例：

[code]

    printf("%s\n", buf);
    
[/code]

