【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20732

動きません
投稿者---sdfa(2005/04/22 11:06:03)


#include <stdio.h>
#define MAXLINE 1000

void reverse(char from[], char to[]);
int getline(char s[], int lim);

int main() {
char line[MAXLINE];
char rline[MAXLINE];
int len;
while ((len = getline(line, MAXLINE))>0) {
reverse(line,rline);
printf("%s", rline);
}
}

int getline(char s[], int lim) {
int c,i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++ i)
s[i] = c;
if (c == '\n') {
s[i] = '\n';
++i;
}
s[i] = '\0';
return i;
}
void reverse(char from[], char to[]) {
int i,j;
for (i = 0; from[i] != '\0'; ++i);
for (j = 0, i--; i <= 0; ++j, --i)
to[j] = from[i];
to[j] = '\0';
return ;
}


↑を実行するとセグメントエラーと出ます。
セグメントエラーってなんですか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:動きません 20733 いおり 2005/04/22 11:19:53
<子記事> Re:動きません 20734 επιστημη 2005/04/22 11:22:16
<子記事> Re:動きません 20738 nop 2005/04/22 12:29:26


No.20733

Re:動きません
投稿者---いおり(2005/04/22 11:19:53)


まずは掲示板の注意をよく読んでください。
> ソースの添付は「HTML変換ツール」で字下げ!

segmental fault とは要はソースにバグがあるから
プログラム実行時に実行に失敗したということです。
今回で言えば

>void reverse(char from[], char to[]) {
> int i,j;
> for (i = 0; from[i] != '\0'; ++i);
> for (j = 0, i--; i <= 0; ++j, --i)
> to[j] = from[i];
> to[j] = '\0';
> return ;
>}

ここの
> for (j = 0, i--; i <= 0; ++j, --i)
これで継続条件が間違っている為、toを初期化せずに終了し、
初期化していないデータを表示しようとして失敗しているものと
思います。


この投稿にコメントする

削除パスワード

No.20734

Re:動きません
投稿者---επιστημη(2005/04/22 11:22:16)


>void reverse(char from[], char to[]) {
> int i,j;
> for (i = 0; from[i] != '\0'; ++i);
> for (j = 0, i--; i <= 0; ++j, --i)
> to[j] = from[i];
> to[j] = '\0';
> return ;
>}

iが0以下である間減らし続けるのね…終わらんね。

>セグメントエラーってなんですか?

許されていないメモリ領域をイジると発生します。



この投稿にコメントする

削除パスワード

No.20736

Re:動きません
投稿者---επιστημη(2005/04/22 12:02:12)


>iが0以下である間減らし続けるのね…終わらんね。

ごめん違う。その前に文字列長が設定されているのか。



この投稿にコメントする

削除パスワード

No.20738

Re:動きません
投稿者---nop(2005/04/22 12:29:26)


>↑を実行するとセグメントエラーと出ます。
>セグメントエラーってなんですか?

YAHOO
e-words

などで調べたの?


この投稿にコメントする

削除パスワード

No.20803

Re:動きません
投稿者---sdfa(2005/04/26 11:02:58)


一般的な意味は分かったけど、この場合の意味がわからなかったからわざわざこんな所できいたんじゃないですか。

> for (j = 0, i--; i <= 0; ++j, --i)

for (j = 0, i--; i >= 0; ++j, --i)
したら動きました。
どうもお騒がせしてすみませんでした。


この投稿にコメントする

削除パスワード

No.20808

Re:動きません
投稿者---επιστημη(2005/04/26 15:34:55)


>一般的な意味は分かったけど、この場合の意味がわからなかったからわざわざこんな所できいたんじゃないですか。

あ、そぉだったの? 誰一人そうは思っていなかったのだから、
多分あなたの訊き方が悪かったのでしょう。



この投稿にコメントする

削除パスワード

No.20809

Re:動きません
投稿者---nop(2005/04/26 15:49:59)


>一般的な意味は分かったけど、この場合の意味がわからなかったからわざわざこんな所できいたんじゃないですか。

セグメンテーションエラーはセグメンテーションエラーです。
場合により意味が変わる事はありません。

# そもそも、一般的な意味がわかっているのでしたら、
# 「セグメントエラーってなんですか?」など、
# 疑問として出てこないはずです。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧