-2

コンパイル時に警告を表示する次のスニペットがあります (コードはとにかく動作します)。

char *x_first_name, *x_last_name, *x_address, *x_zip;

const size_t firsts_count = sizeof(firsts) / sizeof(firsts[0]);
const size_t lasts_count = sizeof(lasts) / sizeof(lasts[0]);
const size_t streets_count = sizeof(streets) / sizeof(streets[0]);
const size_t zips_count = sizeof(zips) / sizeof(zips[0]);

srand(time(NULL));

x_first_name = firsts[rand() % firsts_count]; // line 69
x_last_name = lasts[rand() % lasts_count]; // line 70
x_address = streets[rand() % streets_count]; // line 71
x_zip = zips[rand() % zips_count]; // line 72

警告コンパイル:

authorize.c: In function 'main':
authorize.c:69: warning: assignment discards qualifiers from pointer target type
authorize.c:70: warning: assignment discards qualifiers from pointer target type
authorize.c:71: warning: assignment discards qualifiers from pointer target type
authorize.c:72: warning: assignment discards qualifiers from pointer target type

firsts、lasts、street、zips は次のように宣言されます。

const char *firsts[] = {
        "Asgar",
        "Aadit",
        "Aanand",
        "Aaron"
};

私は何を間違っていますか?

4

2 に答える 2

1

firsts、lasts、streets は配列であるため、操作のような操作firsts[rand() % firsts_count];は const char* の値を返します。

しかし、これらの値を (char へのポインター) である x_first_name および x_last_name 変数で収集しようとしていますchar*。そのため、割り当てでは const の性質が失われています。

于 2013-06-13T13:18:29.350 に答える