- 締切済み
C言語 ポインターと文字列
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)); }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- osamuy
- ベストアンサー率42% (1231/2878)
や、回答No.3は的外れだった。
- osamuy
- ベストアンサー率42% (1231/2878)
> char *name; > name = "test"; char name[] = "test";
- notnot
- ベストアンサー率47% (4900/10358)
書かれている部分には、おかしな点は無いので、書かれていない部分にバグがあります。
- kmee
- ベストアンサー率55% (1857/3366)
その例にあるプログラムに#include <stdio.h>とint main(){} を付けてやってみましたが。 こちらでまったく再現しません。コンパイラは同じ。OSは10,7ですがあまり関係ないでしょう。 他の間違いが、たまたまそこでエラーになってるということはないですか?(Cではよくあることです)