ページ 11

配列における文字変換

Posted: 2011年10月23日(日) 16:53
by keiji
質問させてもらいます。
よろしくお願いします。

配列においてある文字列中に#が入力された場合、その文字を文字列の終わりを表す \0
に置き換えたいと思っています。

そこでなのですが、
<code>
int i;
if(buf == '#') buf = '\0';
</code>

とすると、プログラム起動中にエラーが起こってしまいます。
c言語に関して無知なため意味不明な質問をしているかもしれませんが、
よろしくお願いします。

Re: 配列における文字変換

Posted: 2011年10月23日(日) 16:58
by box
コード全体を見せてください。
今の状態では、buf[] をどのように定義しているかなどがわかりませんので、
何とも回答できません。

なお、codeタグの使い方が正しくありません。不等号ではなく、[ と ] とで囲んでください。
プレビューしてから投稿しましょう。

Re: 配列における文字変換

Posted: 2011年10月23日(日) 17:03
by keiji
申し訳ないです。
次から気をつけます。

コード:

#include<stdio.h>
#include<string.h>
#define MAXLEN 78
char buf[MAXLEN+2];

int main(void){
 while(1){
 int len,i;
 
 fgets(buf, sizeof(buf), stdin);
 if (buf[0] == '\n' || buf[0] == '0') break;
 if(buf[i] == '#') buf[i] = '\0';
 
 len = strlen(buf);
 if(buf[len - 1] == '\n') buf[len - 1] = '\0';
 printf("%s\n", buf);
 }

 return 0;
}
といったかんじです。
よろしくお願いします。

Re: 配列における文字変換

Posted: 2011年10月23日(日) 17:47
by bitter_fox
keiji さんが書きました:

コード:

 int len,i;

 if(buf[i] == '#') buf[i] = '\0';
変数iは初期化されていないのでbufがどこを指すかは不定となってしまいますよ。

Re: 配列における文字変換

Posted: 2011年10月23日(日) 18:34
by keiji

コード:

int i = 0;

for(i=0;i<MAXLEN;i++){
if(buf[i] == '#') buf[i] == '\0';
}
で解決しました。
これでもおかしいでしょうか?

Re: 配列における文字変換

Posted: 2011年10月23日(日) 18:38
by ISLe
strtokを使えばかなりすっきり書けると思いますけど。