在c语言中,我是否访问了错误的(越界的)字符数组索引
假设我们有一个类似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
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};
将数组初始化为全零,这与所有空终止符相同。您不必显式写入循环。