gpt4 book ai didi

c - 带大括号的字符串初始值设定项

转载 作者:太空狗 更新时间:2023-10-29 16:46:05 26 4
gpt4 key购买 nike

我遇到了一段进行以下初始化的代码:

static const uint8_t s[] = {"Some string"};

我希望它被解释如下:右侧匹配一个 char 指针数组和一个指向字符串文字“Some string”的元素。而左边部分是一个uint8_t数组。那么我期望的行为是 s 的第一个元素接收指向字符串文字的指针的一些截断值,从而在以下代码中导致意外行为,假设 s 是一个字符串。

我做了如下测试代码:

#include <stdint.h>
#include <stdio.h>

static const uint8_t s1[] = "String1";
static const uint8_t s2[] = { "String2" };
int main(void){

printf("%p, %p\n", s1, s2);
printf("%s, %s\n", s1, s2);

return 0;
}

令我惊讶的是,这似乎并没有发生。不仅代码可以正常工作,而且反汇编显示 s1s2 都以相同的方式初始化为相应的字符串。

这是 gcc 特有的吗? C 语法是否允许将单个字符串文字放入 {} 并仍然将其解释为字符串文字?

最佳答案

引自N1570(C11终稿),6.7.9 Initialization(重点是我的):

  1. An array of character type may be initialized by a character string literal or UTF-8 string literal, optionally enclosed in braces. Successive bytes of the string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.

关于c - 带大括号的字符串初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36431081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com