初心者です
異なる2つのソースファイルで配列の共有はできるものなのですか?
いろいろやってみてはいるのですが・・・
戻り値を配列のポインタにしてもうまくいきませんでした。
よろしくお願いします。
すいますん、初心者の質問です
無題
Re:無題
すいません
あまりに拙いコードなんで、勇気が要ります。
/* 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;
}
すいません、よろしくお願いします
あまりに拙いコードなんで、勇気が要ります。
/* 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:無題
すいません。#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つのファイルであればいいと思いますが、
あえて呼び出して使いたいのです
よろしくお願いします
ヘッダファイルもです
/* f_scan.h */
#ifndef _INCLUDE_F_SCAN_
#define _INCLUDE_F_SCAN_
extern char* f_scan(void);
#endif
ここに変数を共有しようとして
extern char array[31];
としても、未解決のシンボル・・・
定義されていません
などとでます
どうすればいいのか途方にくれてしまって・・・
もちろん1つのファイルであればいいと思いますが、
あえて呼び出して使いたいのです
よろしくお願いします
Re:無題
すいません、そのままコピペしました
したがって、f_scan()には問題がないと考えています。
問題は、f_scan()内で作られた配列をmain()内で使えない・・・・
いいえ、問題がわからないから質問していました。
一度どっかのページで、
return "HelloWorld";
で文字列を返していて、解説に実は文字列のポインタを返している旨があったので
ポインタを返せば f_scan()が終了しても、配列もそのまま残って main()で使えるのでは・・
と思ったりして いろいろやってみました。
よろしくお願いします
/* 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); #endifmain()内で、コードを/**/に変えると、きちんと実行されます
したがって、f_scan()には問題がないと考えています。
問題は、f_scan()内で作られた配列をmain()内で使えない・・・・
いいえ、問題がわからないから質問していました。
一度どっかのページで、
return "HelloWorld";
で文字列を返していて、解説に実は文字列のポインタを返している旨があったので
ポインタを返せば f_scan()が終了しても、配列もそのまま残って main()で使えるのでは・・
と思ったりして いろいろやってみました。
よろしくお願いします
Re:無題
エラーメッセージも提示しておきます
■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 ***
なぜ、未定義なのか? ちゃんと宣言してると思うのですが・・・
■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:無題
こういうことがしたいのでしょうか?それとも別のことですか? なお、当該のコンパイルエラーは、 > 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); }