ポインタ型変数(文字列)に記憶された文字列の長さを求めよ。ただし文字列をscanf文で読み,関数を使わないこと。
上記の問題なのですが,
#include <stdio.h>
main(){
int i;
char a[128];
printf("文字列を入力してください → ");
scanf("%s",a);
for (i=0; a!= 0; i++){}
printf("あなたの入力した文字列は<%s>で,文字数は%dです。\n",a, i);
}
と配列を用いたものは出来ました。
C言語を始めたばかりなので,ポインタというものがいまいちわかっておりません。その辺を含め,教えていただけると幸いです。
ポインタに関する質問です
Re:ポインタに関する質問です
> ポインタ型変数(文字列)に記憶された文字列の長さを求めよ。
ポインタ型変数に文字列を記憶することはできません。
> ただし文字列をscanf文で読み,関数を使わないこと。
scanfも関数です。
ポインタ型変数に文字列を記憶することはできません。
> ただし文字列をscanf文で読み,関数を使わないこと。
scanfも関数です。
Re:ポインタに関する質問です
たかぎさんの仰るとおり、学校の課題ならもう少し、正確に課題を載せてもらわないと、どうしたいのか
わかりませんね。
配列に格納した文字列の先頭アドレスを、ポインタで指して、文字数を求めるのに、strlenなどの組み込
み関数を使わずに、先ほどのポインタを使って解けということでしょうか。その場合に *(a+i)のような
使い方は可なのでしょうか?
さらに、丸投げは禁止されているのですから、わかるところまでは解いて、何がうまくいかないのか記し
てください。ポインタを使って文字数を求める例は、ほとんどのC言語の入門本や、ググれば載っています。
わかりませんね。
配列に格納した文字列の先頭アドレスを、ポインタで指して、文字数を求めるのに、strlenなどの組み込
み関数を使わずに、先ほどのポインタを使って解けということでしょうか。その場合に *(a+i)のような
使い方は可なのでしょうか?
さらに、丸投げは禁止されているのですから、わかるところまでは解いて、何がうまくいかないのか記し
てください。ポインタを使って文字数を求める例は、ほとんどのC言語の入門本や、ググれば載っています。
Re:ポインタに関する質問です
回答ありがとうございます。学校の課題自体が「ポインタ型変数(文字列)に記憶された文字列の長さを求めよ。ただし文字列をscanf文で読み,関数を使わないこと。」となっています。
>配列に格納した文字列の先頭アドレスを、ポインタで指して、文字数を求めるのに、strlenなどの組み込
み関数を使わずに、先ほどのポインタを使って解けということでしょうか。
ポインタ型変数に文字列を記憶できないとなると,このやり方だと思われます。
>*(a+i)のような使い方は可なのでしょうか?
可です。
調べてはみたのですが,strlenを使っているものばかりで参考にはなりませんでした。オススメの入門本があれば教えていただけませんか?
>配列に格納した文字列の先頭アドレスを、ポインタで指して、文字数を求めるのに、strlenなどの組み込
み関数を使わずに、先ほどのポインタを使って解けということでしょうか。
ポインタ型変数に文字列を記憶できないとなると,このやり方だと思われます。
>*(a+i)のような使い方は可なのでしょうか?
可です。
調べてはみたのですが,strlenを使っているものばかりで参考にはなりませんでした。オススメの入門本があれば教えていただけませんか?
Re:ポインタに関する質問です
> 関数を使わないこと。
とのことですが、scanfとprintfは使ってもよいのでしょうか?
それであれば...
通常、32ビットの環境であれば3文字、64ビットの環境であれば7文字が上限です。
とのことですが、scanfとprintfは使ってもよいのでしょうか?
それであれば...
#include <stdio.h> int main(void) { char format[/url] = "%0s"; char *string; for (size_t i = 0; i < sizeof(string); i++) *((char*)&string + i) = 0; format[1] += sizeof(string) - 1; scanf(format, (char*)&string); printf("あなたの入力した文字列は<"); int length = printf("%s", (char*)&string); printf(">で,文字数は%dです。\n", length); return 0; }入力できる文字数はポインタのサイズに依存します。
通常、32ビットの環境であれば3文字、64ビットの環境であれば7文字が上限です。
Re:ポインタに関する質問です
>>*(a+i)のような使い方は可なのでしょうか?
>可です。
じゃ、
for (i=0; *(a+i)!='\0'; i++){}
こうするのが一番簡単。
>可です。
じゃ、
for (i=0; *(a+i)!='\0'; i++){}
こうするのが一番簡単。
Re:ポインタに関する質問です
回答ありがとうございます。
たかぎさん
scanfとprintfは使っても大丈夫です。書いていただいたプログラムをコンパイルした所,エラーが出てしまいました。
nonさん
参考にさせていただきます。
たかぎさん
scanfとprintfは使っても大丈夫です。書いていただいたプログラムをコンパイルした所,エラーが出てしまいました。
nonさん
参考にさせていただきます。
Re:ポインタに関する質問です
> 書いていただいたプログラムをコンパイルした所,エラーが出てしまいました。
処理系不明のため、C99で書いています。古い規格にしか対応していない処理系ではコンパイルできません。
処理系不明のため、C99で書いています。古い規格にしか対応していない処理系ではコンパイルできません。