【问题标题】:C (Linux): warning: assignment discards qualifiers from pointer target type [duplicate]C(Linux):警告:分配从指针目标类型中丢弃限定符[重复]
【发布时间】:2023-04-10 08:17:01
【问题描述】:

我有以下 sn-p 在编译时给我一个警告(代码仍然有效):

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、streets 和 zips 声明为:

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

我做错了什么?

【问题讨论】:

  • 您没有显示firstslasts 等的定义。从错误的外观来看,它们包括const,而x_first_name 没有。
  • firstslastsstreetszips 是如何声明的?
  • 另外,预计会因使用rand() % k而受到困扰。
  • 是的,问题是“const char*”

标签: c


【解决方案1】:

正如编译器所述,您在分配时从指针中丢弃限定符(在本例中为const)。

当您为 char * 分配 const char * 的值时,会发生这种情况。

【讨论】:

    【解决方案2】:

    firsts,lasts,streets 是数组,所以像 firsts[rand() % firsts_count]; 这样的操作将返回一个值,在你的情况下是 const char*。

    但是您正试图在 x_first_name 和 x_last_name 变量中收集这些值,它们是 char*(指向 char 的指针)。所以在赋值时它失去了它的 const 特性。

    【讨论】:

    • 是的,我明白了,我将只使用“char*”,我忘记了我在标题中将这些数组定义为“const char*”,我只查看了主代码并忽略了标题文件。
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多