相关疑难解决方法(0)

如何摆脱GCC中从字符串常量到'char*''警告的弃用转换?

所以我正在开发一个非常大的代码库,最近升级到gcc 4.3,它现在触发了这个警告:

警告:不推荐将字符串常量转换为'char*'

显然,解决这个问题的正确方法是找到每个声明

char *s = "constant string";
Run Code Online (Sandbox Code Playgroud)

或函数调用如:

void foo(char *s);
foo("constant string");
Run Code Online (Sandbox Code Playgroud)

并使他们成为const char指针.但是,这意味着触及564个文件,最小,这不是我希望在此时执行的任务.现在的问题是我正在运行-werror,所以我需要一些方法来扼杀这些警告.我怎样才能做到这一点?

c++ string gcc

401
推荐指数
11
解决办法
41万
查看次数

可以抛弃constness导致未定义的行为?

const int a = 10
int *p = (int*) &a;
*p = 20;
printf("a = %d", a);
Run Code Online (Sandbox Code Playgroud)

是否可以输出10或20,具体取决于编译器?

c casting const

12
推荐指数
4
解决办法
566
查看次数

C语言中限定词的深层分析

const变量在哪里准确存储,它的行为如何变化?比如说:

const int i=10; // stores where ?  
main()  
{  
   const int j=20; //stores where?   
   return 0;  
}  
Run Code Online (Sandbox Code Playgroud)

如果答案是代码段,那么以下代码如何工作?

main()  
{  
   const int j=20;  
   int *p;  
   p=&j;  
   (*p)++;   
   return 0 ;  
} 
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常......如何更改只读内存?它是如何真正存储的?请详细解释一下.

c const

8
推荐指数
2
解决办法
3753
查看次数

如何在C中最好地使用const关键字?

我试图了解我应该如何const在C代码中使用.首先,我并没有真正使用它,但后来我看到了很多const在整个过程中使用的例子.我应该努力并回去并虔诚地制作合适的变量const吗?或者我只是在等我的时间?

我想它可以更容易地读取预期会发生变化的变量,特别是在函数调用中,对于人类和编译器.我错过了其他重要的观点吗?

c const

8
推荐指数
2
解决办法
8552
查看次数

有没有办法(实际上)保护对象不被修改?

const类型限定符使编译器的情况下发出一个错误消息试图修改声明为一个对象const,但这是不够的protection.For例如以下程序修改声明为所述阵列的两个元件const:

#include <stdio.h>

int main(void)
{
    const char buf[2] = { 'a','b' };
    const char *const ptr = buf;
    unsigned long addr = (unsigned long)ptr;

    *(char *)addr = 'c';
    addr = addr + 1;
    *(char *)addr = 'd';

    printf("%c\n", buf[0]);
    printf("%c\n", buf[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以,事实证明编译器没有足够的保护来保护对象不被修改.我们如何防止这种事情?

c

7
推荐指数
1
解决办法
159
查看次数

如何修改const变量的值?

我能够const在gcc 中更改修改变量的值,但在其他编译器中却没有.我在gcc上尝试了这个代码,它更新了ij(11)的值.使用在线编译器,我得到不同的值.

#include<stdio.h>
void main() {
  const int i=10;
  int *j;
  j = &i;
  (*j)++;
  printf("address of j is %p address of i is %p\n",j,&i);
  printf("i is %d and j is %d\n",i,*j);
}
Run Code Online (Sandbox Code Playgroud)

c gcc const constants

5
推荐指数
3
解决办法
3万
查看次数

为什么我可以通过指针转换而不是C中的全局变量来更改本地const变量?

我想通过使用指针来改变常量的值.

请考虑以下代码

int main()
{
    const int const_val = 10;
    int *ptr_to_const = &const_val;

    printf("Value of constant is %d",const_val);
    *ptr_to_const = 20;
    printf("Value of constant is %d",const_val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,常量的值被修改.

但是当我尝试使用全局常量的相同代码时,我遇到了运行时错误.Windows崩溃记者正在开放.在此语句"*ptr_to_const = 20;"中打印第一个printf语句后,可执行文件暂停

请考虑以下代码

const int const_val = 10;
int main()
{
    int *ptr_to_const = &const_val;
    printf("Value of constant is %d",const_val);
    *ptr_to_const = 20;
    printf("Value of constant is %d",const_val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序使用codeblocks IDE在mingw环境中编译.

谁能解释一下发生了什么?

c pointers constants

4
推荐指数
2
解决办法
2087
查看次数

声明为常量,但定义为非常量,C

在我的头文件中声明一个 const 变量是否有效,但将其定义为一个非常量变量供内部使用?

c

2
推荐指数
1
解决办法
71
查看次数

在C++中修改const int

运行以下代码显示&x = ptr,那么x和*ptr怎么不相等?

const int x=10;
int* ptr =(int*) &x;
*ptr = (*ptr)+1;

cout << &x << " " << x << "  " << ptr <<"  " <<*ptr;  //output : 0012FF60 10  0012FF60  11
Run Code Online (Sandbox Code Playgroud)

c++ pointers const

1
推荐指数
2
解决办法
348
查看次数

相同的 C 代码,在 Mac 和 Linux 上的输出不同

我在运行下面的代码时弄乱了指针和const

int main()
{
    const int test = 10;
    int *ptr = &test;
    printf("%d\n", test);
    *ptr = 1;
    printf("%d\n", test);
}
Run Code Online (Sandbox Code Playgroud)

在 Mac 上,结果为:

10
10
Run Code Online (Sandbox Code Playgroud)

在linux机器上:

10
1
Run Code Online (Sandbox Code Playgroud)

为什么更改值在 Mac 上不起作用?两台机器都使用 gcc 编译代码。

c linux macos gcc undefined-behavior

0
推荐指数
2
解决办法
158
查看次数

标签 统计

c ×8

const ×5

gcc ×3

c++ ×2

constants ×2

pointers ×2

casting ×1

linux ×1

macos ×1

string ×1

undefined-behavior ×1