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

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

 詳しくはこちら


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

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


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

No.22001

文字列が表示できません(printf)
投稿者---326(2005/07/21 00:27:45)


お世話になります。
Win2000+VC6.0です。

昨日よりC言語の勉強を始め、
下記のようなコードを試しに書いて
実行したところ、関数「GetInputStr」
の中でのprintfで文字列が出力されません。
どなたかヒントをお教え願えませんでしょうか?

source start ---->

#include<stdio.h>
#include<string.h>

int GetInputStr(char *p);

int main(int argc , char *argv[])
{
    char s[100];
    char *p;

    p = s;

    GetInputStr(p);

    printf("Main:あなたが入力した文字列は、\n「%s」です。\n", s);

    return(0);
}

int GetInputStr(char *p)
{
    int i=0;

    while( (*p++ = getchar()) != '\n');
    *--p= '\0';

    printf("GetInputStr:あなたが入力した文字列は、\n「%s」です。\n",p);
    
    return(0);
}



<--- source end


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列が表示できません(printf) 22002 Blue 2005/07/21 00:40:24


No.22002

Re:文字列が表示できません(printf)
投稿者---Blue(2005/07/21 00:40:24)


GetInputStr内でpの値を更新してしまっているので、
先頭から表示していないのだと思います。
(今の処理だと'\0'から表示している)

一度先頭ポインタを覚える変数を用意して、それをprintfの引数にしてみてさい。



この投稿にコメントする

削除パスワード

No.22003

文字列が表示できません(printf)
投稿者---326(2005/07/21 00:56:29)


お世話になります。326です。

Blueさんありがとうございます!
すごい勢いで分かりました!
確かにポインタを進めておりました・・・

下記ソースにて動作しました。

source start --->

#include<stdio.h>
#include<string.h>

int GetInputStr(char *p);

int main(int argc , char *argv[])
{
char s[100];
char *p;

p = s;

GetInputStr(p);

printf("Main:あなたが入力した文字列は、\n「%s」です。\n", p);

return(0);
}

int GetInputStr(char *p)
{
int i=0;
char *q = p;

while( (*p++ = getchar()) != '\n');
*--p= '\0';

printf("GetInputStr:あなたが入力した文字列は、\n「%s」です。\n",q);

return(0);
}

<--- source end

しかし、そうするとMain側で
渡しているポインタ(*p)は移動しないのが不思議です・・
これは、VBでいうところの
by value
だからなのでしょうか?
(アドレスを表示(%xで*pを出力)してみたら、それっぽいです・・)

重ねての質問ですみませんが
お教え願います。


この投稿にコメントする

削除パスワード

No.22004

Re:文字列が表示できません(printf)
投稿者---まきじ(2005/07/21 01:00:44)


>しかし、そうするとMain側で
>渡しているポインタ(*p)は移動しないのが不思議です・・

s の先頭のポインタ(アドレス)の、値渡しだからです。

main() の p と GetInputStr() の p は、共に、s の先頭の
アドレスが格納されていますが、変数としては別物です。


この投稿にコメントする

削除パスワード

No.22005

【解決・お礼】文字列が表示できません(printf) 
投稿者---326(2005/07/21 01:20:27)


まきじさん、ありがとうございます。
>s の先頭のポインタ(アドレス)の、値渡しだからです。
これを考えること2分・・非常によく分かりました!
初心者つまづきポイントで思いっきりつまづいておりました(汗

ありがとうございました!


この投稿にコメントする

削除パスワード

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