複数の異なる関数で使用する必要がある構造体定義がある。私の構造体定義では、サイズ "len"の配列を持ち、このlen変数はargv [1]の文字列の長さです。ご覧のように、私はこの変数が必要ですが、mainの外にstruct定義を置くことはできません。そうでなければ、その変数は失われます。しかし、私はそれを私の関数のプロトタイプの前に置く必要があります。この問題の解決策は何ですか?ここに私のコードはあります:関数プロトタイプの前に構造体定義を置くが、構造体はargvからの情報を必要とする
void randomize(type_darwin *darwin, type_monkey *monkey);
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("Error! Arguments are of form: ./%s [string to parse]\nBe sure your string is surrounded by double quotes.\n", argv[0]);
return 0;
}
int len = strlen(argv[1]); // length of string
const char *string = argv[1]; // make string a constant
// define two structs, one for the Darwinian algorithm and one for the monkey bashing algorithm
// lock determines whether that element in sentence is locked (in programming terms, if it should now be a constant)
typedef struct darwin
{
char sentence[len];
int lock[len]; // 0 defines not locked. Nonzero defines locked.
} type_darwin;
typedef struct monkey
{
char sentence[len];
int lock; // 0 defines entire array not locked. Nonzero defines locked.
} type_monkey;
VLAは、とにかく 'struct'では使用できません。 – Olaf
いずれにしても、ターミネーターを許可するには 'char sentence [len + 1];'のようにもう1つ必要です。 –
@WeatherVane argv引数にヌルターミネータが含まれていませんか? strlnを使ってargv [1]の引数のサイズを調べました。ターミネーターは含まれていませんか? – LTClipp