我在c中访问错误的(越界)char数组索引

时间:2013-02-24 08:35:22

标签: c arrays null indexing int

假设我们在c中有一个字符数组,

char a[20];

我们可以访问索引20来像这样终止NULL。

a[20]='\0';

但在我的算法中。 (“这是char数组转换器的整数”)如果最后一个索引是小于char数组的大小,则必须使用终止NULL,例如,

如果我的int的大小是4(“1421”)那么我必须在索引0处放置'1',在索引1处放置'4',在索引2处放置'2'并且在索引3处放置'1'。

最后在索引4处终止NULL

index=4;
a[index]='\0';

修复相同代码的另一种方法,

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

但我只是想知道是否可能......在索引20处终止NULL。

好的我认为每个人都非常感谢你们的帮助。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

char a[20]:20表示您可以拥有0-19中的元素。并且假设您将仅使用最多19个。如果您填写最多20个,那么您将收到错误。

将其更改为:

a[20+1] => a[21]现在您可以使用20来\0a[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();
}

答案 2 :(得分:0)

考虑使用全零来初始化char数组:char a[20] = { 0 };

这样,无论你写多少个字符(最多19个),你总是无效终止。