在c中不推荐将字符串常量转换为'char*'

use*_*862 11 c

我正在使用字符串.

每当我执行下面的程序时,我都会收到一个错误,因为在行中c*的字符串常量被转换为'char 'char *p = "hello"

我究竟做错了什么?

这个错误是什么意思?我怎么能纠正它?

我的代码是:

#include<stdio.h>
int main()
{
    char *p = "hello";
    printf("%s",p+1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 18

这应该是一个警告(尽管您可能已将编译器设置为将警告视为错误,这通常是一个好主意).

你想要的是:char const *p = "hello";相反.

尝试修改字符串文字会产生未定义的行为.这会const阻止您意外地执行此操作(即,尝试通过指针写入的代码将无法编译,除非您删除const限定符,例如使用强制转换).


Dae*_*mon 5

这是一个警告,因为"Hello"字符串是一个常量,并且您试图将其存储在非const char*中.解决问题要么成功

const char* p = "Hello" 要么 char[] p = "Hello"

  • `const char*`和`char const*`是等价的,都是指向常量数据的指针(后者虽然风格稍差).关于`const`关键字的`*`的位置是重要的.不要将它与`char*const`混淆,后者是指向常量数据的指针. (5认同)
  • @GrijeshChauhan:一个编译器*可以*几乎任何(或没有)原因产生警告,但是至少有一点让我感到惊讶的是看到一个把'const`放在类型之前而不是之后.该标准要求接受其中之一/两者. (4认同)
  • @matt const char*和char const*都将使内容const,如果你想使指针const,那么const shoud出现在char*const ptr之间; (2认同)