• 締切済み

教えてください

入力した文字列のスペースをすべて取り除く関数を返すのですが、分かりません。(例)a s d fと入力したら、asdfと表示します。途中まで考えたのですが、どうしてもできません。教えてください。宜しくお願いします。(このソースは、コンパイルエラーです。) 14: 移植性のないポインタ変換(関数a) #include <stdio.h> char a(char *st) { char *ptr=st; while(*st!='\0') { if (*st != ' ') { *ptr++=*st; } } *ptr='\0'; return(ptr); } int main(void) { char str[21]={'\0'}; int i=0; char ch; printf("文字列を入力してください:"); while(i<21) { ch=getchar(); if (ch=='\n') {break; } else if (ch != '\0' && ch != '\n') { str[i] =ch; i++; } } str[i] = '\0'; printf("%s",a(str)); return(0); }

みんなの回答

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.3

a()は途中までできてるのに、最期に返すものが、、、

gsosba
質問者

補足

コンパイルはできたのですが、どうしても、a s d f と入力したら、すぐ、終了してしまいます。分からないので、教えてください。宜しくお願いします。

回答No.2

main関数はともかく、a関数がね・・・ ポインタの概念を思い出して、整理する事をオススメします。 (やろうとしている事は判るけどね)

gsosba
質問者

補足

コンパイルはできたのですが、どうしても、a s d f と入力したら、すぐ、終了してしまいます。分からないので、教えてください。宜しくお願いします。

回答No.1

 エラーになるのは関数 aの戻り値の型が char型になっているからではないでしょうか。  関数 aのローカル変数 ptrの型である char *型を戻り値の型にすればコンパイルは通るはずです。

gsosba
質問者

補足

コンパイルはできたのですが、どうしても、a s d f と入力したら、すぐ、終了してしまいます。分からないので、教えてください。宜しくお願いします。

関連するQ&A

専門家に質問してみよう