ページ 1 / 1
無題
Posted: 2009年5月23日(土) 17:13
by 初心者
初心者です
異なる2つのソースファイルで配列の共有はできるものなのですか?
いろいろやってみてはいるのですが・・・
戻り値を配列のポインタにしてもうまくいきませんでした。
よろしくお願いします。
すいますん、初心者の質問です
Re:無題
Posted: 2009年5月23日(土) 17:28
by box
その、「いろいろやってみたがうまくいかなかった」ソースコードを
提示してみる、というお考えはありますか?
Re:無題
Posted: 2009年5月23日(土) 17:42
by tieria
すいません
あまりに拙いコードなんで、勇気が要ります。
/* mainsource.c */
int main(void)
{
char* array_pointa_rec = f_scan();
printf("%s\n", array);
return 0;
}
/* subsource.c */
char* f_scan(void)
{
char array[31];
char* array_pointa;
/*
ここで"HelloWorld"と入力
*/
scanf ("%s\n", &array[0]);
printf ("%s\n", array);
array_pointa = &array[0];
return array_pointa;
}
すいません、よろしくお願いします
Re:無題
Posted: 2009年5月23日(土) 17:51
by tieria
すいません。#include<stdio.h>が両方のファイルに抜けていました
ヘッダファイルもです
/* f_scan.h */
#ifndef _INCLUDE_F_SCAN_
#define _INCLUDE_F_SCAN_
extern char* f_scan(void);
#endif
ここに変数を共有しようとして
extern char array[31];
としても、未解決のシンボル・・・
定義されていません
などとでます
どうすればいいのか途方にくれてしまって・・・
もちろん1つのファイルであればいいと思いますが、
あえて呼び出して使いたいのです
よろしくお願いします
Re:無題
Posted: 2009年5月23日(土) 17:54
by box
ソースコードを貼り付けるときは、
HTMLの<pre>タグと</pre>タグで囲んでください。<と、>は、半角です。
一度原点に立ち返って、お手持ちのソースファイルの正確な内容を載せていただけますか?
Re:無題
Posted: 2009年5月23日(土) 18:27
by tieria
すいません、そのままコピペしました
/* test.c */
#include <stdio.h>
#include "f_scan.h"
int main(void)
{
char array[31]
char *array_pointa_rec;
array_pointa_rec = f_scan();
printf("%s\n", array);
return 0;
/*
f_scan();
return 0;
*/
}
/* f_scan.c */
#include <stdio.h>
char* f_scan(void)
{
char array[31];
char* array_pointa;
/*
ここで"HellWorld"と入力
*/
scanf("%s", &array[0]);
printf("%s\n", array);
array_pointa = &array[0];
return array_pointa;
}
/* f_scan.h */
#ifndef _INCLUDE_F_SCAN_
#define _INCLUDE_F_SCAN_
extern char* f_scan(void);
#endif
main()内で、コードを/**/に変えると、きちんと実行されます
したがって、f_scan()には問題がないと考えています。
問題は、f_scan()内で作られた配列をmain()内で使えない・・・・
いいえ、問題がわからないから質問していました。
一度どっかのページで、
return "HelloWorld";
で文字列を返していて、解説に実は文字列のポインタを返している旨があったので
ポインタを返せば f_scan()が終了しても、配列もそのまま残って main()で使えるのでは・・
と思ったりして いろいろやってみました。
よろしくお願いします
Re:無題
Posted: 2009年5月23日(土) 18:31
by tieria
エラーメッセージも提示しておきます
■C:\Users\user\Documents\C> bcc32 -etest test.c f_scan.c test.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
エラー E2141 test.c 10: 宣言の構文エラー(関数 main )
エラー E2451 test.c 11: 未定義のシンボル array_pointa_rec(関数 main )
*** 2 errors in Compile ***
f_scan.c:
test.c:
エラー E2141 test.c 10: 宣言の構文エラー(関数 main )
エラー E2451 test.c 11: 未定義のシンボル array_pointa_rec(関数 main )
*** 2 errors in Compile ***
なぜ、未定義なのか? ちゃんと宣言してると思うのですが・・・
Re:無題
Posted: 2009年5月23日(土) 18:54
by box
こういうことがしたいのでしょうか?それとも別のことですか?
なお、当該のコンパイルエラーは、
> char array[31]
最後にセミコロンがないためです。
/* test.c */
#include <stdio.h>
char array[31];
int main(void)
{
f_scan();
printf("main: %s\n", array);
return 0;
}
/* f_scan.c */
#include <stdio.h>
extern char array[/url];
void f_scan(void)
{
scanf("%s", array);
printf("f_scan: %s\n", array);
}
Re:無題
Posted: 2009年5月23日(土) 18:59
by box
それとも、こういうことでしょうか?
/* test.c */
#include <stdio.h>
int main(void)
{
printf("main: %s\n", f_scan());
return 0;
}
/* f_scan.c */
#include <stdio.h>
char *f_scan(void)
{
static char array[31];
scanf("%s", array);
printf("f_scan: %s\n", array);
return array;
}
Re:無題
Posted: 2009年5月23日(土) 19:05
by tieria
いや~
セミコロンがない・・・
ありがとうございます。
今日の昼からいろいろいじって、もうだめだと思って質問しました。
ここはなんかレベルが高そうだったので何度もためらいましたが、
質問してよかったです。
boxさん、本当にありがとうございます
Re:無題
Posted: 2009年5月23日(土) 19:20
by tieria
どちらかというと、下のほうです
下は main()内で変数を宣言していませんので。
なにはともあれ、ありがとうございました!