我在网上的一个实践测试中发现了这个示例代码
strcpy(e1.name, "K");有效,但语句不是?任何原因。请澄清。
观察到Gcc上的e1.age=10;为:o/p

#include<stdio.h>
#include<stdlib.h>

struct employee
{
    char name[15];
    int age;
    float salary;
};
const struct employee e1;

int main()
{
    strcpy(e1.name, "K"); // How strcpy is being used to store values in a
                          // constant variable e1 .
    //e1.age=10; // not valid
    printf("%s %d %f", e1.name, e1.age, e1.salary);
    return 0;
}

最佳答案

当您访问age时,编译器知道e1const并且禁止写入。
另一方面,当调用strcpy时,指针被传递给在(标准)库中实现的函数。因为它只是一个内存地址,所以这个库将只执行其写操作。
这是不允许的,因为指针实际上是const对象的内存地址。编译器将告诉您,这是不允许的,但只会产生一个警告。严格地说,这个警告应该是个错误。

关于c - 如何使用strcpy将值存储在常量中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15990417/

10-13 08:19