在c语言中,我是否访问了错误的(越界的)字符数组索引

在c语言中,我是否访问了错误的(越界的)字符数组索引,c,arrays,null,indexing,int,C,Arrays,Null,Indexing,Int,假设我们有一个类似c的字符数组 char a[20]; 我们可以访问索引20来像这样放置终止NULL吗 a[20]='\0'; 但在我的算法中。(“这是整型到字符数组转换器”)如果最后一个索引小于字符数组的大小,则必须将终止NULL放入,例如 若我的int的大小是4(“1421”),那个么我必须把'1'放在索引0上,把'4'放在索引1上,把'2'放在索引2上,把'1'放在索引3上 最后在索引4处终止NULL index=4; a[index]='\0'; 修复相同代码的另一种方法 if(i

假设我们有一个类似c的字符数组

char a[20];
我们可以访问索引20来像这样放置终止NULL吗

a[20]='\0';
但在我的算法中。(“这是整型到字符数组转换器”)如果最后一个索引小于字符数组的大小,则必须将终止NULL放入,例如

若我的int的大小是4(“1421”),那个么我必须把'1'放在索引0上,把'4'放在索引1上,把'2'放在索引2上,把'1'放在索引3上

最后在索引4处终止NULL

index=4;
a[index]='\0';
修复相同代码的另一种方法

if(index<20)  (Will increase one condition)
    a[index]='\0';

if(index数组
char a[20]
在索引0到19处有20个字符的空间。写入
a[20]
正在数组外写入,将产生不可预测的后果。您最多只能使用20个字符,包括任何终止的空字符。如果您需要20个字符的空间加上终止的空字符,则需要将数组声明为
字符a[21];
。另外,声明
字符a[20]
不会在任何地方放置空值。

数组
字符a[20]
在索引0到19处有20个字符的空间。写入
字符a[20]
正在数组外写入,将产生不可预测的后果。您最多只能使用20个字符,包括任何终止的空字符。如果您需要20个字符的空间加上终止的空字符,则需要将数组声明为
字符a[21];
。另外,声明
字符a[20]
不会将空值放在任何地方。

字符a[20]
:20表示您可以使用
0-19
中的元素。假设您最多只使用19个。如果您最多填充20个,则会出现错误

将其更改为:

a[20+1]=>a[21]
现在您可以使用20来放置
\0
a[20]='\0'

@AnkeshKushwah的代码

int main()
{
char arr[4]="hell";  
printf("%c",arr[4]); // here you will see garabage. 
printf("%c",arr[5]); // here is the terminating character. after 4.
char arr[]="hell";   
printf("%c",arr[4]); // here you will see terminating character.Because hell will take 
                        0-3 and 4 contains \0 
getch();
}

char a[20]
:20表示您可以拥有
0-19
中的元素。假设您最多只能使用19个元素。如果您最多填充20个元素,则会出现错误

将其更改为:

a[20+1]=>a[21]
现在您可以使用20来放置
\0
a[20]='\0'

@AnkeshKushwah的代码

int main()
{
char arr[4]="hell";  
printf("%c",arr[4]); // here you will see garabage. 
printf("%c",arr[5]); // here is the terminating character. after 4.
char arr[]="hell";   
printf("%c",arr[4]); // here you will see terminating character.Because hell will take 
                        0-3 and 4 contains \0 
getch();
}

考虑用全零初始化字符数组:
chara[20]={0};


这样,不管你写了多少个字符(最多19个),你总是以空结尾。

考虑用全零初始化你的字符数组:
chara[20]={0};


这样,不管你写了多少个字符(最多19个),你总是以空结尾。

你不“拥有”索引20…你的20元素数组只会变成19!你不“拥有”索引20…你的20元素数组只指向19!什么?我的意思是,我几乎听不懂答案。@AlexeyFrunze在哪一部分你觉得读起来有困难。让我知道,我会尽量弄清楚。起初你的答案太短了,无法理解。现在一行中包含了相当多的内容,超过了需要滚动的内容。我不知道y是否是你有一个50英寸的显示屏,看起来不错,但很多人可能没有。现在好多了,但是那些
a[20]
a[20+1];
模棱两可。那些是表达式还是声明的一部分?那么你应该这么说。半神秘的答案很难理解,特别是如果你是这一地区的新手。什么?我的意思是,我几乎听不懂答案。@AlexeyFrunze你在哪一部分读起来有困难。让我知道,我会尽量弄清楚。首先,你的answer太短了,无法理解。现在,它的一半包含在一行中,而不是需要滚动。我不知道你是否有一个50英寸的显示屏,它看起来很好,但很多人可能没有。现在更好了,但是那些
a[20]
a[20+1];
模棱两可。那些是表达式还是声明的一部分?那么你应该这么说。半神秘的答案很难理解,特别是如果你是这个地区的新手。
chara[20]={0}
将数组初始化为全零,这与所有空终止符相同。您不必显式写入循环。
char a[20]={0};
将数组初始化为全零,这与所有空终止符相同。您不必显式写入循环。