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.1
- 回答日時:
その例にあるプログラムに#include <stdio.h>とint main(){} を付けてやってみましたが。
こちらでまったく再現しません。コンパイラは同じ。OSは10,7ですがあまり関係ないでしょう。
他の間違いが、たまたまそこでエラーになってるということはないですか?(Cではよくあることです)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
【C言語教えてください】sin波...
-
scanfに文字が入力されたときに...
-
ガウスの消去法、後退代入について
-
C言語プログラミング
-
defineで定数が置き換えられな...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
分数を表示するプログラム(長...
-
switch分のケースを範囲数?に...
-
カレンダーのプログラムについて
-
C言語初心者です。次の問題で質...
-
C言語です
-
じゃんけんゲームの応用
-
BMI値から体型を判定するプログ...
-
(C言語)めちゃくちゃな値にな...
-
なぜgccはstdio.hをインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報