C言語の配列の大きさについて

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

C言語の配列の大きさについて

#1

投稿記事 by VBユーザ » 16年前

こんにちは。
質問させてください。

まず、ある関数内でtest_str配列の大きさを100で定義しておき以下のようなプログラムを組みます。
void test(int n){
    char *test_str[100];
    
    // 開始位置を探索
    int startpoint;
    int endpoint;
    for(i=0; i<n; i++){
        if(strcmp(str, "<<●>>")==0){
            startpoint = i;
            break;
        }
    }
    // 終了位置を探索
    for(i=startpoint+1; i<n; i++){
        if(strcmp(str, "<</●>>")==0){
            endpoint = i;
            break;
        }
    }
}

ここで、test_str配列のサイズは100もいらず、必要なのは
endpoint - startpoint + 1
だけで済んだとしたとき、このとき、配列の大きさを再定義することはできませんか?
VBではredimに相当することをやりたいのです。

VBから入ったためか、C言語に非常に苦戦しております。
どなたか教えてください。

たかぎ

Re:C言語の配列の大きさについて

#2

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

念のため確認しますが、test_strとstrは別物ですね?

だとすると、test_strの宣言位置をstartpointとendpointの値が確定した後に移動し、

char *test_str[endpoint - startpoint + 1];

とすればOKです。
ただし、C99に対応していない処理系の場合にはこの方法は無理ですので、reallocでも使ってください。
あるいは、allocaを使える処理系ならそれでもよいでしょう。

VBユーザ

Re:C言語の配列の大きさについて

#3

投稿記事 by VBユーザ » 16年前

>たかぎ様

私がやったときの勘違いかなぁと思ったのですが、その方法ではやはり
「定数式が必要です。」
と起こられてしまいました。

書き忘れましたが、Visual C++6.0の開発環境を利用しています。
ReDimやReDim Preserve相当はreallocなど難しい方法でしか実現できませんか?

non

Re:C言語の配列の大きさについて

#4

投稿記事 by non » 16年前

たかぎさんの疑問にもあるように

char *test_str[100];

str
の関係はどうなっているのでしょうか?

紅葉

Re:C言語の配列の大きさについて

#5

投稿記事 by 紅葉 » 16年前

定数式が必要ですとでるのは定数でないからです。
配列なんで変動する可能性がある変数で作ることはできません。
万一やりたいのでしたらconstをつけた変数を入れてください。

たかぎ

Re:C言語の配列の大きさについて

#6

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

> 定数式が必要ですとでるのは定数でないからです。
> 配列なんで変動する可能性がある変数で作ることはできません。

元々C99でないとダメなコードなので、エラーが出る理由としては「C99に対応していないから」というのが正確なところです。

> 万一やりたいのでしたらconstをつけた変数を入れてください。

C言語の場合、constを付けても定数式にはできません。

閉鎖

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