アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語の勉強をしており、その途中でよく分からない挙動に出くわしたので
原因を知りたく、投稿しました。

よく分からない挙動と言うのは
ポインターで作った文字列表示の際に
for(i=0; *(str+i) != '\0'; i++)
としてfor文を抜ける様にしたのですが、最後まで表示した後に
セグメントエラーになってしまいます。
真ん中の文がおかしいのかと思い、単体で
printf("%c", *(str+1)) や printf("%c", *(str+i)) (iには適当な数字を入れて)
表示したのですがセグメントエラーにはなりませんでした。
また、下の様に手書きの場合とfor文で回した場合でプログラムを作って試したのですが、
手書きの方はエラーは出ず、for文だとエラーがでました。

これはfor文の仕様なのでしょうか?
分かる方がいらっしゃったら教えて頂けるとありがたいです。

ちなみにパソコンは
MacOSX10.6
コンパイラはXcodeを落とした時に入手できるもの
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
を使用しました。

int i;
char *name;
name = "test";

printf("name: %s\nadd: %p\n", name, &name);
printf("by hand\n");
printf("%c\n%p\n",*(name+0), (name+0));
printf("%c\n%p\n",*(name+1), (name+1));
printf("%c\n%p\n",*(name+2), (name+2));
printf("%c\n%p\n",*(name+3), (name+3));
printf("%c\n%p\n",*(name+4), (name+4));

printf("with for\n");
for (i = 0; i < 4; i++) {
printf("%c\n%p\n",*(name+i), (name+i));
}

A 回答 (4件)

や、回答No.3は的外れだった。

    • good
    • 0

> char *name;


> name = "test";

char name[] = "test";
    • good
    • 0

書かれている部分には、おかしな点は無いので、書かれていない部分にバグがあります。

    • good
    • 0

その例にあるプログラムに#include <stdio.h>とint main(){} を付けてやってみましたが。


こちらでまったく再現しません。コンパイラは同じ。OSは10,7ですがあまり関係ないでしょう。

他の間違いが、たまたまそこでエラーになってるということはないですか?(Cではよくあることです)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!