ポインタに関する質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゲンタシン

ポインタに関する質問です

#1

投稿記事 by ゲンタシン » 15年前

ポインタ型変数(文字列)に記憶された文字列の長さを求めよ。ただし文字列を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:ポインタに関する質問です

#2

投稿記事 by たかぎ » 15年前

> ポインタ型変数(文字列)に記憶された文字列の長さを求めよ。

ポインタ型変数に文字列を記憶することはできません。

> ただし文字列をscanf文で読み,関数を使わないこと。

scanfも関数です。

non

Re:ポインタに関する質問です

#3

投稿記事 by non » 15年前

たかぎさんの仰るとおり、学校の課題ならもう少し、正確に課題を載せてもらわないと、どうしたいのか
わかりませんね。
配列に格納した文字列の先頭アドレスを、ポインタで指して、文字数を求めるのに、strlenなどの組み込
み関数を使わずに、先ほどのポインタを使って解けということでしょうか。その場合に *(a+i)のような
使い方は可なのでしょうか?
さらに、丸投げは禁止されているのですから、わかるところまでは解いて、何がうまくいかないのか記し
てください。ポインタを使って文字数を求める例は、ほとんどのC言語の入門本や、ググれば載っています。

ゲンタシン

Re:ポインタに関する質問です

#4

投稿記事 by ゲンタシン » 15年前

回答ありがとうございます。学校の課題自体が「ポインタ型変数(文字列)に記憶された文字列の長さを求めよ。ただし文字列をscanf文で読み,関数を使わないこと。」となっています。

>配列に格納した文字列の先頭アドレスを、ポインタで指して、文字数を求めるのに、strlenなどの組み込
み関数を使わずに、先ほどのポインタを使って解けということでしょうか。
ポインタ型変数に文字列を記憶できないとなると,このやり方だと思われます。

>*(a+i)のような使い方は可なのでしょうか?
可です。

調べてはみたのですが,strlenを使っているものばかりで参考にはなりませんでした。オススメの入門本があれば教えていただけませんか?

たかぎ

Re:ポインタに関する質問です

#5

投稿記事 by たかぎ » 15年前

> 関数を使わないこと。

とのことですが、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文字が上限です。

non

Re:ポインタに関する質問です

#6

投稿記事 by non » 15年前

>>*(a+i)のような使い方は可なのでしょうか?
>可です。

じゃ、
for (i=0; *(a+i)!='\0'; i++){}
こうするのが一番簡単。

ゲンタシン

Re:ポインタに関する質問です

#7

投稿記事 by ゲンタシン » 15年前

回答ありがとうございます。

たかぎさん
scanfとprintfは使っても大丈夫です。書いていただいたプログラムをコンパイルした所,エラーが出てしまいました。

nonさん
参考にさせていただきます。

たかぎ

Re:ポインタに関する質問です

#8

投稿記事 by たかぎ » 15年前

> 書いていただいたプログラムをコンパイルした所,エラーが出てしまいました。

処理系不明のため、C99で書いています。古い規格にしか対応していない処理系ではコンパイルできません。

ゲンタシン

Re:ポインタに関する質問です

#9

投稿記事 by ゲンタシン » 15年前

わかりました。色々とありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る