C言語に、ファイルの存在の有無を確認できる
accessという関数があったと思うのですが
使用するヘッダファイルや引数、戻り値などを
説明できる方いらっしゃいましたらどうかお願いします。

accessを使用したらR_OK,F_OKとかいうマクロが
必要になったと思うのですが・・・

このQ&Aに関連する最新のQ&A

A 回答 (4件)

acceess()は元々UNIXのシステムコールであり、POSIX準拠OS以外では互換性が保証されません。


これはsignal()などとともに「移植性を阻害する標準関数」の筆頭に分類されます。

環境が指定されていないのでPOSIXのaccess(2)を想定します。

#inclue <io.h>
int access(const char *, int) ;
第1引数:ファイルパス名
第2引数:チェックするモード(0=存在、2=書きこみ、4=読み出し,6=読み書き)
関数値が-1の時、グローバル変数errnoに以下の値がセットされます。
EACCESS=指定したアクセス権が許可されていない
ENOENT=ファイルが損さしない
(errnoを使用するためにはerrno.hが必要)

ファイルの存在チェックだけならmacros.hのexist()マクロかstat(2)の方が楽なのではないでしょうか。
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char *, struct stat *) ;

#include <sys/types.h>
#include <sys/stat.h>
#include <macros.h>
int exist(const char *) ;

POSIX以外の処理系の場合、OSとコンパイラを指定してください。

この回答への補足

さっそくのご回答ありがとうございます。
さっそくWindows98のVisualC++と
VineLinuxとFreeBSDのgccで試してみました。
VCではio.hが存在したのですがgccでは存在しませんでした。又、macros.hはどちらにも存在しませんでした。


そこで、申し訳ないのですが、再び教えていただけないでしょうか?
VCでaccess関数を使ってみたのですが、戻り値が何を意味してるかがわかりません。
0と-1だけを返してるように見えますが、
0なら「O.Kです」、-1なら「ダメです」、というような解釈をしていいのでしょうか?


それとstat関数ですが、ファイルの存在チェックをする場合、
第2引数には何を与えればいいのでしょうか?
ちなみにVCのstat.h中の構造体statは以下のようになっています。

struct stat {
_dev_t st_dev;
_ino_t st_ino;
unsigned short st_mode;
short st_nlink;
short st_uid;
short st_gid;
_dev_t st_rdev;
_off_t st_size;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};

補足日時:2000/12/10 18:13
    • good
    • 0

それから、補足ですが、stat() を使うか、access() を使うかは、


用途が違うと考えてください。「ファイルの存在の有無を確認」の
意味によって、どちらを使うかが決まります。

本当に、存在するかどうかだけで以降の処理が決まるなら、stat()
を使うのがいいでしょう。ただし、シンボリックリンクとしてだけ
存在して、その先がなくてもいいなら、lstat() がいいかもしれま
せん。

それを読めるかどうか、書けるかどうかが重要な場合は access()
を使うべきです。しかし、単に読めるかどうか、書けるかどうかだ
けじゃなくてそれがファイルなのか、ディレクトリなのか、シンボ
リックリンクなのか、といった様々な可能性もチェックして正しい
処理をしたいという場合には、stat(), lstat() も併用する必要が
あります。

さらに、stat() してから、次のアクションを起こすまでに、誰か
がファイルを消したり、パーミションを落としたりしたら、どうし
たらいいかまで考えはじめると、きりがないですが…。
    • good
    • 0

stat() や access() 等のUNIXのシステムコール関数は、通常 man


に必要十分な情報が載っています。
man 2 stat
man 2 access
等、されてみたでしょうか?英語であったとしても、難しい文法は
使っていませんので、すぐに慣れると思います。OSによっては、日
本語のマニュアルが用意されている場合もありますが、かえってわ
かりにくいこともあるので、原文を参照する習慣をつけるのがいい
です。

例えば、FreeBSDの man によると、stat() の RETURN VALUES は、

 Upon successful completion a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.

ですので、「stat() が成功したとき(ファイルの属性が得られた
とき)に 0 を返し、それ以外では -1 を返して errno に値がセッ
トされる」という意味になります。どういうときに属性が得られな
いことがあるかというと、ERRORS の項を見ると、パスの途中にディ
レクトリでないものがあった、とか、名前が長すぎる、とか、ファ
イルが存在しない、とか、途中のディレクトリにアクセス許可がな
かった、とか、などなどです。

access() に関しても同様ですが、これの主な用途は、自分にとっ
てそのファイルが本当に読み書きできるかを調べるものですので、
可能なら 0 を返し、そうでなければ -1 を返します。ERRORS に関
しては似たようなものですが、-1 を返すかどうかは、どういうモー
ドでのアクセス可能性を問い合わせたかによって変化します。その
意味では、単にファイルのモード等を取り出すだけの stat() とは
異なります。また、access() では、ファイルシステムが readonly
のときに、書き込みができないこともチェックできます。(EROFS
がセットされる)

MSDNというのがマイクロソフトのサービスのことだとすれば、UNIX
に関する情報はあんまり期待できないのではないかと思いますが、
試したことがないのでわかりません。

errno を知りたければ、/usr/include/sys/errno.h を見るのはい
かがですか?ただし、各システムコールで、異なるエラーを同じ
errno で表現したりもしますから、結局 man を見て errno ごとの
意味を読み取るのが正確ですが。

manだけでは不安とか実例がいっぱい欲しいという場合には、書籍
もありますので、「UNIX システムコール プログラミング」などを
キーワードにして、検索してみてください。
    • good
    • 0
この回答へのお礼

とてもためになるお話をありがとうございます。おかげさまで自由に使えるくらいの知識ができたと思います。
書籍の件でもUNIXと聞いて、はっとしました。そういう本を探したことがありませんでした。そういえば他の方で書籍についての質問をしていた方がいましたので、そこを見れば非常に興味深い回答がありました。

それにしてもある程度Cができるようになったらその先はまずUNIXを学ばねばならないのでしょうか?
その辺に関わることをまた別の質問をしたいと思いますのでお暇がありましたらどうかよろしくお願いします。
では、回答をくださったおふた方様、ありがとうございました。

お礼日時:-0001/11/30 00:00

実は数日前にOSをクリーンインストールしてまして、GCC(Cygnus GNU Win32ですが)が入ってないんです。


すみません、GCCについてはちょっと時間がかかりますので他の方の回答が早いかもしれません。

POSIXを想定してたのでmacros.hを持ち出したのですが、ANSI標準ではないので他の処理系では存在しないかもしれません。

access()の関数値は
0=処理が正常に終了
-1=失敗
です。
第2引数が0の場合関数値が0なら「ファイルは存在する」なのですが、-1であっても「存在しない」とは限りません。
そこで、errnoで詳細を確認する必要が出てくるのです。
代表的な例としてはEINTRで、「割り込み発生」を示します。
この場合はファイルは存在します。

stat()の第2引数には常にstruct statのアドレスを渡します。

struct stat st ;
if (stat("c:\\xxx.dat", &st) == -1) {
switch (errno) {
case ENOENT :/* ファイル無し */
case EINTR : /* 割り込み発生(正常) */
default : /* その他のエラー */
perror("c:\\xxx.dat") ;
}
}
このような使い方になります。

なぜ、access()よりstat()をお勧めするかと言うと…。
access()の第2引数は処理系依存だからです。
MSDNでも_access()となっており互換性はWin95/NTです。

この回答への補足

本当にありがとうございます。おかげさまでファイルの存在チェックがだいたいマスターできました。
最後に少々お聞きしたいのですが、
stat関数の関数値とaccess関数の関数値は同じ意味であると解釈してもいいのでしょうか?

それと、どのような本を探せばこのような内容が説明してあるのでしょうか?このような内容や、errnoの全ての値の意味などを勉強してみたいと思うのですが、探し方が悪いのか、それとも住んでる所が田舎すぎるのか、sys内のヘッダファイルを使うような本を見たことがありません。

それともこれらの事はmanやMSDNで調べるべきなのでしょうか?

補足日時:2000/12/11 02:48
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

Q_tcscpy_s(wcscpy_s)の第二引数って

http://msdn.microsoft.com/ja-jp/library/td1esda9%28VS.80%29.aspx

を見て、たとえば以下のような関数を書いたとします。

TCHAR* fn;

void OMG(LPCTSTR c){

int bytes( ( _tcslen(c) + 1 )*sizeof(TCHAR) );
if ( fn = (TCHAR*)malloc( bytes ) ) _tcscpy_s( fn, bytes, c ); //実行しないでください
else return;

/* fnを使用 */

free(fn); fn=0;

}


これ、マルチバイトだと正常に出来るのですが
なぜかUnicodeだと落ちてしまいました。

第2引数の説明は

コピー先の文字列バッファのサイズ。

<英語版でも>
Size of the destination string buffer.


となっていますが、その上に

numberOfElements

って書いてあるのでまさかと思い
サイズではなく文字数に変えたら、どうも正常に動作するようになったようです。

とくに_sがつく関数は文字数だったりバッファサイズだったりまちまちな感がもともとあるのに、しかも
こういうところでこういうことがあると厳しいものがあるのですが
これは本当に誤植なのでしょうか?

また、かなり稀なケースであり本当に誤植だとしたら、MSDNの他の文字列操作関数には記述の誤りがあるものはありますか?

http://msdn.microsoft.com/ja-jp/library/td1esda9%28VS.80%29.aspx

を見て、たとえば以下のような関数を書いたとします。

TCHAR* fn;

void OMG(LPCTSTR c){

int bytes( ( _tcslen(c) + 1 )*sizeof(TCHAR) );
if ( fn = (TCHAR*)malloc( bytes ) ) _tcscpy_s( fn, bytes, c ); //実行しないでください
else return;

/* fnを使用 */

free(fn); fn=0;

}


これ、マルチバイトだと正常に出来るのですが
なぜかUnicodeだと落ちてしまいました。

第2引数の説明は

コピー先の文字...続きを読む

Aベストアンサー

C++のtemplateを使ったstrcpy_s,wcscpy_sは

template <size_t size>
errno_t strcpy_s(
  char (&strDestination)[size],
  const char *strSource
); // C++ only

template <size_t size>
errno_t wcscpy_s(
  wchar_t (&strDestination)[size],
  const wchar_t *strSource
); // C++ only

となっています。
これをみると、sizeは「配列数」ということになります。

ですので、「numberOfElements」のさす意味そのもので「要素の数」(≠文字数)という解釈になります。


ちなみに、Unicodeでも1文字2バイトとは限りませんので
一概に文字数ともいえません。
(サロゲート で検索してみてください。)


>TCHAR c[100];
>
>if ( fn = (TCHAR*)malloc( sizeof c ) ) _tcscpy_s( fn, >sizeof(c)/sizeof(TCHAR), c );
>
>とか
>_tcscpy_s( fn, 100, c );
まぁ、結果的にあっていますが、fnに格納するときにバッファが足りているかをみるのをcを使うのはよろしくないかなと。

>int len( _tcslen(c) + 1 );
>if ( fn = (TCHAR*)malloc( len*sizeof(TCHAR) ) ) _tcscpy_s( fn, len, c );
のほうがよいですね。
まぁ、cに格納されている文字列を新しい領域をmallocしてコピーするのであれば、_tcsdupで

TCHAR* fn = _tcsdup(c);

と記述できます。
http://msdn.microsoft.com/ja-jp/library/y471khhc%28VS.80%29.aspx

C++のtemplateを使ったstrcpy_s,wcscpy_sは

template <size_t size>
errno_t strcpy_s(
  char (&strDestination)[size],
  const char *strSource
); // C++ only

template <size_t size>
errno_t wcscpy_s(
  wchar_t (&strDestination)[size],
  const wchar_t *strSource
); // C++ only

となっています。
これをみると、sizeは「配列数」ということになります。

ですので、「numberOfElements」のさす意味そのもので「要素の数」(≠文字数)という解釈になります。


ちな...続きを読む

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

QヘッダファイルでのFILE型引数宣言について

下記の(1)、(2)のファイルについての質問になります。


(1)cファイル

#include <stdio.h>

/******************/
/* 表示モード処理 */
/******************/
void view_mode( FILE *fp_in )
^^^^
{
chardata;


while( 1 ){
/* ファイルから1文字読込み */
data = fgetc( fp_in );

/* ファイルの終了かをチェック */
if(data == EOF ){
break;
}

/* 表示処理 */
printf( "%c", data );
}

return;
}

(2)ヘッダファイル

void view_mode( FILE *fp_in );
^^^^

◆質問内容
(1)にview_modeの処理を書き、(2)にview_modeのプロトタイプ宣言をしていますが、
(1)はコンパイルが通るのですが、(2)はコンパイルが通りません。

エラー内容を見ると、

エラー E2147 testddga.c 1: 引数宣言は 'FILE' で始められない

と表示されてしまいます。

(1)では、引数宣言にFILEを使用しているのにコンパイルが通り、
(2)では、何故かはコンパイルが通らないので、疑問に思っております。

お手数ですが、ご教授の程お願いたします

下記の(1)、(2)のファイルについての質問になります。


(1)cファイル

#include <stdio.h>

/******************/
/* 表示モード処理 */
/******************/
void view_mode( FILE *fp_in )
^^^^
{
chardata;


while( 1 ){
/* ファイルから1文字読込み */
data = fgetc( fp_in );

/* ファイルの終了かをチェック */
if(data == EOF ){
break;
}

/* 表示処理 */
printf( "%c", data );
}

return;
}

(2)ヘッダファイル

void view_mode( FILE *fp_in );
...続きを読む

Aベストアンサー

(2)で識別子「FILE」を使用する前に
#include <stdio.h>
をしていないから。

識別子「FILE」はstdio.hの中で定義されています。なのでstdio.hをインクルードしてからじゃないと識別子「FILE」を使用出来ません。

stdio.hをインクルードする前に識別子「FILE」を使用してしまうと「FILE」は「単なる変数名」になってしまいます。

「エラー E2147 testddga.c 1: 引数宣言は 'FILE' で始められない」
の意味は
「引数宣言は'int i'や'char c'などのintやcharのように型名で始めなければならず、iやcやFILEなどの単なる変数名では始められない」
と言う意味です。

要は、stdio.hをインクルードして
typedef struct {
(略)
} FILE; /* This is the FILE object */
って宣言をしてからじゃないと「FILE」って書けないのです。

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

Q引数 戻り値 return文について

今、C言語を初めて勉強してます。

勉強していて、引数と戻り値、return文

についてよくわかりません。

どなたか詳しく素人にもわかるように教えて

頂けないでしょうか?よろしくお願いします。

Aベストアンサー

まず、関数とは何らかの処理をして結果を返してくれるものです。わざとらしい例ですが二つの数を足してその結果を返す関数を見てみましょう。

#include <stdio.h>

int add( int hoge, int piyo ){
return hoge + piyo;
}

int main(void){
int data;

data = add( 253, 434 );
printf( "%d", data );

return 0;
}

見てわかると思いますが、引数とは関数内の処理に使うデータです。
このデータは関数を呼び出すときに与えます。

add( 253, 434 )

すると与えられたデータは関数に渡され仮引数と言うものに格納されます。
この例では hoge に 253、piyo に 434 が格納されます。

int add( int hoge, int piyo ){

この仮引数は普通の変数のように使うことが可能なのです。

hoge + piyo

そしてこの結果を戻り値として return 文で返してやります。

return hoge + piyo;

返すとは具体的にどこへ返すのかと言うと呼び出したところへです。
ここでは main 関数内の呼び出し元です。

data = add( 253, 434 );

data と言う変数へは関数によって返された戻り値(関数値とか返却値とかとも言ったりします)が格納されます。つまり 253 と 434 を足した数です。

引数も戻り値も結局はデータです。処理させたいデータが引数で、処理した結果であるデータが戻り値です。

return は呼び出し元へ結果を返すためのものです。


C言語の関数にはいろいろな種類があります。

引数も戻り値もあるもの。

int add( int hoge, int piyo ){
return hoge + piyo;
}

引数はあるが戻り値のないもの。

void add( int hoge, int piyo ){
printf( "%d", hoge + piyo );
}

戻り値はあるが引数のないもの。

#include <stdlib.h>
#include <time.h>

int getRandNum(void){
srand( time( NULL ) );
return rand() % 500;
}

戻り値も引数もないもの。

void print(void){
printf( "%d + %d = %d", 253, 434, 253 + 434 );
}

これらの使い分けはデータの内容や型、処理の内容により適宜必要なものを使ってください。

まず、関数とは何らかの処理をして結果を返してくれるものです。わざとらしい例ですが二つの数を足してその結果を返す関数を見てみましょう。

#include <stdio.h>

int add( int hoge, int piyo ){
return hoge + piyo;
}

int main(void){
int data;

data = add( 253, 434 );
printf( "%d", data );

return 0;
}

見てわかると思いますが、引数とは関数内の処理に使うデータです。
このデータは関数を呼び出すときに与えます。

add( 253, 434 )

すると与...続きを読む

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

Qtimeの引数と戻り値

http://www.microsoft.com/JAPAN/developer/library/vccore/_crt_time.htm
上記サイトで、少しスクロールを下げると、解説のことろで、
引数は NULL でもかまいませんと書かれています。
引数を NULL にして使うのはどういった場合の時ですか?

Aベストアンサー

「NULLでもかまわない」というよりは「NULLでない場合は引数であらわされる領域【にも】値が設定される」という解釈の方が使いやすいでしょう。

1. 純粋に時間を取得したいだけのとき
time_t t ;
t = time(NULL) ;

2. 時間を取得しながら何か処理を行いたいとき
time_t t1, t2 ;
t1 = time(NULL) ;
while((time(&t2) - t1) < 10) {
//時間待ち
}
//t2を使う何らかの処理

通常、time()を使う時って1のパターンです。
「2のような使い方もできる」という程度の認識でいいのではないでしょうか。

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

Q関数の引数と戻り値

度々すいません。
関数に引数として配列のポインタを渡して、戻り値として配列のポインタを返したいのですが、やり方がよく分かりません。
お願いします。

Aベストアンサー

>ポインタを用いて、関数にする前のプログラムが2つ前の投稿
>「ポインタのエラー」にのっていますので、参照してください。

こちらですね。
http://www.okweb.ne.jp/kotaeru.php3?q=663939

それなら、関数の戻り値でresultを返す必要はないと思います。
こんな感じでいいと思います。

void add_n(int *a, int *b, int *result, int n)
/* n は桁数 */
{
int i, arry;

/*配列resultの初期化*/
for(i=0;i<n+1;i++) *(result+i)=0;

carry=0;

/*result=a+bの演算*/
for(i=n; i>=0; i--){
*(result+i)=*(a+i)+*(b+i)+carry;
if(*(result+i)>=10){
*(result+i)-=10;
carry=1;
}
else carry=0;
}

}

>ポインタを用いて、関数にする前のプログラムが2つ前の投稿
>「ポインタのエラー」にのっていますので、参照してください。

こちらですね。
http://www.okweb.ne.jp/kotaeru.php3?q=663939

それなら、関数の戻り値でresultを返す必要はないと思います。
こんな感じでいいと思います。

void add_n(int *a, int *b, int *result, int n)
/* n は桁数 */
{
int i, arry;

/*配列resultの初期化*/
for(i=0;i<n+1;i++) *(result+i)=0;

carry=0;

/*result=a+bの演算*/
for(i=n; i>=0; ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報