C 二维数组的空单元格的值是多少?

C 二维数组的空单元格的值是多少?,c,arrays,string,struct,C,Arrays,String,Struct,我是c语言的新手,我正在努力解决问题 我的问题是,我需要什么来代替'/0',才能跳过它 “空”单元格 我知道我可以用简单的方法来做,只需要在这种情况下拥有所有的.anoxi值,但我只是好奇。 我试着把“”放进去,它给了我所有的名字(不跳过任何名字),“给了我“[Error]空字符常量”和 null,这给了我“[错误]‘null’未在此范围内声明” struct{ charanoxi[10]; 字符名[10]; 半语法[2]; } int main(){ 结构t数组[5][12]; INTR; s

我是c语言的新手,我正在努力解决问题

我的问题是,我需要什么来代替
'/0'
,才能跳过它 “空”单元格

我知道我可以用简单的方法来做,只需要在这种情况下拥有所有的.anoxi值,但我只是好奇。 我试着把
”放进去,它给了我所有的名字(不跳过任何名字),
给了我“[Error]空字符常量”和 null,这给了我“[错误]‘null’未在此范围内声明”

struct{
charanoxi[10];
字符名[10];
半语法[2];
}
int main(){
结构t数组[5][12];
INTR;
strcpy(数组[4][1]。anoxi,“+-1%”;
strcpy(数组[4][2].anoxi,“+-2%”;
strcpy(数组[4][5].anoxi,“+-0.5%”;
strcpy(数组[4][6].anoxi,“+-0.25%”;
strcpy(数组[4][7]。anoxi,“+-1%”;
strcpy(数组[4][8].anoxi,“+-0.05%”;
strcpy(数组[0][0].gramma,“M”);
strcpy(数组[0][1].gramma,“K”);
strcpy(数组[0][2].gramma,“N”);
strcpy(数组[0][3].gramma,“O”);
strcpy(数组[0][4].gramma,“I”);
strcpy(数组[0][5]。语法,“R”);
strcpy(数组[0][6]。语法,“L”);
strcpy(数组[0][7].gramma,“V”);
strcpy(数组[0][8].gramma,“G”);
strcpy(数组[0][9].gramma,“A”);
strcpy(数组[0][10].gramma,“X”);
strcpy(数组[0][11].gramma,“S”);
strcpy(数组[1][0]。名称,“黑色”);
strcpy(数组[1][1]。名称,“Brown”);
strcpy(数组[1][2]。名称,“红色”);
strcpy(数组[1][3]。名称,“橙色”);
strcpy(数组[1][4]。名称,“黄色”);
strcpy(数组[1][5]。名称,“绿色”);
strcpy(数组[1][6]。名称,“蓝色”);
strcpy(数组[1][7]。名称,“紫色”);
strcpy(数组[1][8]。名称,“灰色”);
strcpy(数组[1][9]。名称,“白色”);
strcpy(数组[1][10]。名称,“Gold”);
strcpy(数组[1][11]。名称,“Silver”);
对于(r=0;rC没有“空”的概念。C中的变量表示实际的物理内存位置,并且它们包含内存中包含的任何内容,这些内容要么是它们初始化为包含的内容,要么是一些随机值(如果它们从未初始化过)(请注意,
static
s默认初始化)

这并不妨碍您选择将变量的一个可能值解释为“空”,但这将是您的选择,完全取决于您。然后,您必须使用该值初始化变量/数组并进行检查。字符变量通常使用值
'\0'
来实现此目的,这应该对您有效--只需确保您注意单个字符和数组之间的差异:例如,
…if、 ..gramma[0]='\0''…

您可能会考虑到一个例外:允许指针变量的值之一是一个名为NULL的值,它保证不指向任何东西。这通常用于初始化指针变量,但您仍然必须进行初始化和检查自己。

C没有“空”的概念。.C中的变量表示实际的物理内存位置,并且它们包含内存中包含的任何内容,这些内容要么是它们被初始化为包含的内容,要么是一些随机值(如果它们从未被初始化过)(请注意,

static
s默认情况下被初始化)

这并不妨碍您选择将变量的一个可能值解释为“空”,但这将是您的选择,完全取决于您。然后,您必须使用该值初始化变量/数组并进行检查。字符变量通常使用值
'\0'
来实现此目的,这应该对您有效--只需确保您注意单个字符和数组之间的差异:例如,
…if、 ..gramma[0]='\0''…


这可能是一个例外:允许使用指针变量的值之一是NULL,它保证不指向任何东西。这通常用于初始化指针变量,但您仍然必须进行初始化和检查自己。

现在,您可能需要读取它。my提供了一个简洁的示例,可能会派上用场*


首先,请允许我质疑这段代码的有效性。
#include <stdio.h>

struct t { 
    char anoxi[10];
    char name[10];
    char gramma [2];
};

int main(void) {
        struct t my_array[5][1];
        if(my_array[0][0].anoxi != '\0')
                printf("%s\n", my_array[0][0].anoxi);
        return 0;
}
为什么?

因为数组持有的内存没有初始化为任何内容,所以它的值是未定义的,这将调用未定义的行为

我们可以通过初始化每个字符串来修复此问题,如下所示:

    struct t my_array[5][1];
    my_array[0][0].anoxi[0] = '\0';
    if(my_array[0][0].anoxi[0] != '\0')
            printf("edw %s\n", my_array[0][0].anoxi);
memset (my_array, 0, sizeof (my_array);
或者,正如Mike所建议的,你可以这样使用:

    struct t my_array[5][1];
    my_array[0][0].anoxi[0] = '\0';
    if(my_array[0][0].anoxi[0] != '\0')
            printf("edw %s\n", my_array[0][0].anoxi);
memset (my_array, 0, sizeof (my_array);

通常我们将变量的值设置为预定义的值,这对我们来说,humans告诉我们这个单元格/字符串/任何内容都是空的

难道不知道这一点吗,除非我们告诉我们的程序不要注意空的“东西”。我们必须告诉我们的程序什么是空的“东西”,特别是如何识别它

在这里,您有一个字符串,并检查
数组[4][r].anoxi!='\0'
,这总是正确的,因为左侧是一个数组,它在这个表达式中衰减为指针,如M.M所说



*我不是在这里写的,因为答案已经太长了

现在你知道了,你可能想读我的,它提供了一个简洁的例子,可能会派上用场*


首先,请允许我质疑这段代码的有效性。
#include <stdio.h>

struct t { 
    char anoxi[10];
    char name[10];
    char gramma [2];
};

int main(void) {
        struct t my_array[5][1];
        if(my_array[0][0].anoxi != '\0')
                printf("%s\n", my_array[0][0].anoxi);
        return 0;
}
为什么?

因为数组持有的内存没有初始化为任何内容,所以它的值是未定义的,这将调用未定义的行为

我们可以通过初始化每个字符串来修复此问题,如下所示:

    struct t my_array[5][1];
    my_array[0][0].anoxi[0] = '\0';
    if(my_array[0][0].anoxi[0] != '\0')
            printf("edw %s\n", my_array[0][0].anoxi);
memset (my_array, 0, sizeof (my_array);
或者,正如Mike所建议的,你可以这样使用:

    struct t my_array[5][1];
    my_array[0][0].anoxi[0] = '\0';
    if(my_array[0][0].anoxi[0] != '\0')
            printf("edw %s\n", my_array[0][0].anoxi);
memset (my_array, 0, sizeof (my_array);

通常我们将变量的值设置为预定义的值,这对我们来说,humans告诉我们这个单元格/字符串/任何内容都是空的

不知道吗