1

私は単純なプログラムを書いていて、問題の文字列のサイズを取得するために strlen 関数を使用したいと考えています。

次に、たとえばtestarray[strlen(somestring)];のような配列を作成したいと思います。

しかし、コンパイルできず、「エラー: 可変サイズのオブジェクトが初期化されていない可能性があります」というエラーが表示されます

ただし、その文字列の長さは変わらないので、マシンに何らかの方法で伝える必要があると思います。

私はこれらのヘッダーにしかアクセスできません。

stdio.h 文字列.h

誰かがナレッジボムを投下できたら最高だ。:)

編集: 私は間違っていましたtestarray[strlen(somestring)]; コンパイルできますが、testarray[strlen(somestring)] = {}; できません。testarray [strlen(somestring)]; を使用 使おうとするとゴミが出ます。

ありがとう、memset で動作するようになりました!

4

4 に答える 4

2

あなたの最善の策は、「malloc()」を使用することです

char *testarray = (char *)malloc(strlen(somestring)+1);

C++ でプログラミングしている場合は、vector<> を使用することをお勧めします。

C99 は「可変長配列」を導入しましたが、すべての C コンパイラに移植できるわけではありません。個人的には、それらを使用しないことをお勧めします。

「malloc()」が残ります;)

そして、nhahtdh は非常に正しいです。対応する「free()」を必ず実行してください。

于 2012-11-06T03:54:08.513 に答える
0

temp のメモリを 0 に初期化する必要があります。これは{}、元のコードで空の括弧が行ったことです。memsetを使用するか

memset(temp, 0, sizeof(temp));

または for ループ (malloc/free がないため、memset がない可能性があります)。

int length = sizeof(temp);
int i;
for (i = 0; i < length; ++i)
{
   temp[i] = 0;
}
于 2012-11-06T04:14:34.737 に答える
0

これが役立つことを願っています

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[])
{
    char array[256];
    printf ("Enter a sentence: ");
    fgets(array, 256, stdin);
    printf ("The sentence entered is %zu characters long.\n", strlen(array));
    return 0;
}
于 2013-06-27T03:39:29.280 に答える
0

testarray[strlen(somestring)] = {};

上記の初期化はできません。文字列のサイズは動的に計算されるため (異なる場合があります)。静的配列の初期化では、配列の正確なサイズを提供する必要があります。

「memset」を使用して動的配列を初期化できます。

于 2012-11-06T04:32:44.820 に答える