相关疑难解决方法(0)

C和C++:自动结构的部分初始化

例如,如果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 c++

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

如何表示空char?

我正在编写一个小程序但是在编译时我一直收到这个错误

错误:空字符常量

我意识到这是因为我试图用空的空格替换有效的字符,c[i]=''但我无法找到另一种方式来表示它.

c

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

字符串文字是否计为部分初始化程序并进行零初始化?

在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] = …

c string initialization literals

14
推荐指数
2
解决办法
954
查看次数

指向多个源文件之间共享的数组的指针

这是我的文件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分段错误

如果你向我解释这个结果,我将不胜感激.

我的问题:

  • 在多个源文件中声明变量(包括数组)的正确方法是什么?
  • 当在不同的文件中声明它们时,如何使用指针访问数组的元素?

c gcc gcc4

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

C数组大小限制

我在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)

c arrays string

0
推荐指数
1
解决办法
99
查看次数

标签 统计

c ×5

string ×2

arrays ×1

c++ ×1

gcc ×1

gcc4 ×1

initialization ×1

literals ×1