こんにちは。
質問させてください。
まず、ある関数内で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言語に非常に苦戦しております。
どなたか教えてください。
C言語の配列の大きさについて
Re:C言語の配列の大きさについて
念のため確認しますが、test_strとstrは別物ですね?
だとすると、test_strの宣言位置をstartpointとendpointの値が確定した後に移動し、
char *test_str[endpoint - startpoint + 1];
とすればOKです。
ただし、C99に対応していない処理系の場合にはこの方法は無理ですので、reallocでも使ってください。
あるいは、allocaを使える処理系ならそれでもよいでしょう。
だとすると、test_strの宣言位置をstartpointとendpointの値が確定した後に移動し、
char *test_str[endpoint - startpoint + 1];
とすればOKです。
ただし、C99に対応していない処理系の場合にはこの方法は無理ですので、reallocでも使ってください。
あるいは、allocaを使える処理系ならそれでもよいでしょう。
Re:C言語の配列の大きさについて
>たかぎ様
私がやったときの勘違いかなぁと思ったのですが、その方法ではやはり
「定数式が必要です。」
と起こられてしまいました。
書き忘れましたが、Visual C++6.0の開発環境を利用しています。
ReDimやReDim Preserve相当はreallocなど難しい方法でしか実現できませんか?
私がやったときの勘違いかなぁと思ったのですが、その方法ではやはり
「定数式が必要です。」
と起こられてしまいました。
書き忘れましたが、Visual C++6.0の開発環境を利用しています。
ReDimやReDim Preserve相当はreallocなど難しい方法でしか実現できませんか?
Re:C言語の配列の大きさについて
定数式が必要ですとでるのは定数でないからです。
配列なんで変動する可能性がある変数で作ることはできません。
万一やりたいのでしたらconstをつけた変数を入れてください。
配列なんで変動する可能性がある変数で作ることはできません。
万一やりたいのでしたらconstをつけた変数を入れてください。
Re:C言語の配列の大きさについて
> 定数式が必要ですとでるのは定数でないからです。
> 配列なんで変動する可能性がある変数で作ることはできません。
元々C99でないとダメなコードなので、エラーが出る理由としては「C99に対応していないから」というのが正確なところです。
> 万一やりたいのでしたらconstをつけた変数を入れてください。
C言語の場合、constを付けても定数式にはできません。
> 配列なんで変動する可能性がある変数で作ることはできません。
元々C99でないとダメなコードなので、エラーが出る理由としては「C99に対応していないから」というのが正確なところです。
> 万一やりたいのでしたらconstをつけた変数を入れてください。
C言語の場合、constを付けても定数式にはできません。