相关疑难解决方法(0)

初始化指针时的字符串文字与char数组

灵感来自这个问题.

我们可以char用字符串文字初始化指针:

char *p = "ab";
Run Code Online (Sandbox Code Playgroud)

它完全没问题.人们可以认为它等同于以下内容:

char *p = {'a', 'b', '\0'};
Run Code Online (Sandbox Code Playgroud)

但显然事实并非如此.而且不仅因为字符串文字存储在只读内存中,而且即使通过字符串文字具有一种类型的char数组,并且初始化程序{...}具有char数组类型,两个声明的处理方式也不同,因为编译器是发出警告:

警告:标量初始化程序中的多余元素

在第二种情况下.这种行为的解释是什么?

更新:

此外,在后一种情况下,指针p将具有0x61(第一个数组元素的值'a')而不是存储器位置的值,使得编辑器在警告时仅采用初始化器的第一个元素并将其分配给p.

c arrays gcc

19
推荐指数
4
解决办法
5147
查看次数

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

我正在使用字符串.

每当我执行下面的程序时,我都会收到一个错误,因为在行中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)

c

11
推荐指数
2
解决办法
6511
查看次数

标签 统计

c ×2

arrays ×1

gcc ×1