例如,如果somestruct有三个整数成员,我一直认为在C(或C++)函数中执行此操作是可以的:
somestruct s = {123,};
Run Code Online (Sandbox Code Playgroud)
第一个成员将初始化为123,最后两个成员将初始化为0.我经常对自动数组执行相同的操作,写入int arr[100] = {0,};以便将数组中的所有整数初始化为零.
最近我在GNU C参考手册中读到:
如果不初始化结构变量,则效果取决于它是否具有静态存储(请参阅存储类说明符).如果是,则使用0初始化具有整数类型的成员,并将指针成员初始化为NULL; 否则,结构成员的价值是不确定的.
有人可以告诉我C和C++标准对部分自动结构和自动数组初始化的看法吗?我在Visual Studio中执行上述代码没有问题,但我希望与gcc/g ++兼容,也可能与其他编译器兼容.谢谢
我正在编写一个小程序但是在编译时我一直收到这个错误
错误:空字符常量
我意识到这是因为我试图用空的空格替换有效的字符,c[i]=''但我无法找到另一种方式来表示它.
在C中,您可以部分初始化结构或数组,结果是初始化程序中未提及的成员/元素是零初始化的.(C99第6.7.8.19节).例如:-
int a[4] = {1, 2};
// a[0] == 1
// a[1] == 2
// a[2] == 0
// a[3] == 0
Run Code Online (Sandbox Code Playgroud)
您还可以使用字符串文字(C99第6.7.8.14节)和"连续字符...初始化数组元素"初始化"字符数组类型".例如:-
char b[4] = "abc";
// b[0] == 'a'
// b[1] == 'b'
// b[2] == 'c'
// b[3] == '\0'
Run Code Online (Sandbox Code Playgroud)
一切都很简单.但是如果你明确给出数组的长度会发生什么,但是使用太短的文字来填充数组呢?剩余的字符是否已初始化,或者它们是否具有未定义的值?
char c[4] = "a";
// c[0] == 'a'
// c[1] == '\0'
// c[2] == ?
// c[3] == ?
Run Code Online (Sandbox Code Playgroud)
将它作为一个部分初始化器处理是有意义的,它会使char c[4] = "a"行为完全像char c[4] = {'a'},并且它会产生有用的副作用,让你简洁地将整个字符数组初始化为零char d[N] = …
这是我的文件1,名为main.c
#include <stdio.h>
#include <stdlib.h>
#define MONTHS 12
void ChangeDay(void);
int* days;
int main(void)
{
days = (int*) malloc(MONTHS * sizeof(int));
if(days != NULL)
ChangeDay();
else
return 1;
printf("%2d.\n", days[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
全局变量days被声明为指向type的指针int,
malloc用于为12个整数分配空间.
这是我的文件2,名为day.c
int days[];
void ChangeDay(void)
{
days[0] = 31;
}
Run Code Online (Sandbox Code Playgroud)
ChangeDay调用该函数时,十进制值31将分配给数组天的第一个元素.
这是代码输出:
root @ where:~gcc -m32 -Wall -o day main.c day.c
day.c:1:warning:数组'days'假设有一个元素
root @ where:〜./ day分段错误
如果你向我解释这个结果,我将不胜感激.
我的问题:
我在Linux Redhat上使用gcc编译器.我很惊讶为什么a[5]和a[6](Maya和Mayank)的输出有2个字符差异,尽管它们的大小只有1个字节.
char a[5]="Mayank";
char b[6]="Mayank";
char c[7]="Mayank";
printf("%s\n",a);
printf("%s\n",b);
printf("%s\n",c);
Run Code Online (Sandbox Code Playgroud)
输出:
Maya
Mayank
Mayank
Run Code Online (Sandbox Code Playgroud)