gpt4 book ai didi

c - 在 C 中的数组末尾添加不需要的字符

转载 作者:行者123 更新时间:2023-11-30 19:34:38 24 4
gpt4 key购买 nike

我想输入一个字符序列并将它们保存在一个临时数组中。之后,我想使用临时数组的值创建具有一定大小的实际数组。这是代码:

#include <stdio.h>

int main()
{
char c;
char temp[100];
char array[24];
int i;
char *ptrtemp = temp;


// create a temporary array with getchar function
while(1) {

c = getchar();

if(c == '\n')
break;

*ptrtemp = c;
i++;
ptrtemp++;

}

// type wrong in case of wrong size
if(i != 24) {

printf("Data is wrong");
exit(0);
}

char *ptrarray = array;
char *ptrtemp2 = temp;

// create the actual array
for(i=0;i<24;i++) {

*ptrarray = *ptrtemp2;
if(i == 23)
break;
ptrarray++;
ptrtemp2++;
}

//printing the actual array
printf("\n%s\n", array);
}

但是,在实际序列之后我得到了有趣的元素。数组的大小被指定为 24,但第 25、26、27 等元素也被打印。

Here is what I get

每次我尝试时,我都会看到不同的额外字符。谁能解释一下这里发生了什么?

最佳答案

你做的事情太复杂了。

首先,正如已经指出的,i 没有初始化。其次,不要在数组中为终止 0 留出空间。最后,您可以轻松地直接写入数组:

char array[24 + 1]; // need space for the terminating 0 character

for(int i = 0; i < 24; ++i)
{
// write to array directly:
array[i] = getchar();
if(array[i] == '\n')
{
printf("Data is wrong");
return 0;
}
}

array[24] = 0; // this is important if using %s!
printf("\n%s\n", array);

实际上,您有一个替代方案,因为您知道您总是希望打印恰好 24 个字符:

char array[24]; // skipping(!) space for the terminating 0 character

for(int i = 0; i < 24; ++i)
{
// just as above
}

// NOT now (would be UB, as array is too short):
// array[24] = 0;

// but now need to give precision to tell how many bytes to write
// (maximally; if a terminating 0 would be encountered before,
// printf would stop there)
printf("\n%.24s\n", array);

关于c - 在 C 中的数组末尾添加不需要的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43576782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com