0

charsのストレージラインにcharsの2D配列を作成しようとしています。例えば:

lines[0]="Hello";
lines[1]="Your Back";
lines[2]="Bye";

行は動的に発生する必要があるため、最初に必要な行数がわかりません。これが私が持っているコードです:

int i;
char **lines= (char**) calloc(size, sizeof(char*));

for ( i = 0; i < size; i++ ){
lines[i] = (char*) calloc(200, sizeof(char));
}

for ( i = 0; i < size; i++ ){
free(lines[i]);
}

free(lines);

各行が200文字を超えることはできないことを私は知っています。「エラーC2059:構文エラー:'for'」などのエラーが発生し続けます。私が間違ったことについて何か考えはありますか?

4

4 に答える 4

4

コードは関数に含まれていません。

CおよびC++の関数の外に任意のステートメントを置くことはできません。ただし、関数を使用して変数を初期化することができます。

char** init_lines() {
    char** ln = /* ... */;
    // your allocations etc. here
    return ln;
}

char** lines = init_lines();
于 2010-04-19T00:57:38.667 に答える
1

質問にC++のタグを付けましたstd::vector<std::vector<char> >。これにを使用してみませんか?

コンパイラエラーを見ると、forループの前にセミコロンがないようです。投稿したコードはここでは完全に正常に機能しているようです。

于 2010-04-19T00:52:19.277 に答える
1

まず、最初のループcallocですぐに初期化するので、最初にそれを行うのは時間の無駄です。for

そうは言っても、あなたが示したコードには何の問題もありません。

したがって、エラーが他の場所にあるか、投稿したコードではありません。問題のある行のカットアンドペーストされたコピーと、コンテキストのためにその両側の10行とともに、正確なエラーメッセージを投稿することをお勧めします。それはあなたを助けるのに私たちの生活をずっと楽にしてくれるでしょう。


エラー:

syntax error : 'for' syntax error : missing ')' before ';'
syntax error : missing ';' before '<' missing type specifier - int assumed

コメントの1つに示されているように、通常、括弧のバランスが崩れていることが原因です。(すべてのあなたとキャラクターをチェックして、)それらが同じ数で、正しい場所にあることを確認してください。これはおそらく、)前のステートメントにが欠落しているためですがfor、投稿したコードにはその問題がないため、これは単なる知識に基づいた推測です。

于 2010-04-19T00:53:46.993 に答える
0

ここで私は意見が異なります。役に立つかもしれません。charポインタまたはchardoubleは、コンパイル中に暗黙的に定義されます。したがって、明示的に定義する必要はなく、そうすることで構文エラーが表示されます。callocで初期化せずにcharポインターを試してください。ガベージ値をNULLで初期化したくない場合は、それはcallocを使用するように機能し、何も違いはありません。

于 2013-12-26T05:56:25.867 に答える