gpt4 book ai didi

c - 复制整数数组的 strcopy 函数版本

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:49 25 4
gpt4 key购买 nike

我尝试复制一个 strcopy() 函数,该函数在 ANSI-C 中处理整数数组,作为熟悉函数的练习。这是我写的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int array[10] = {0,2,3,4,5,6,7,8,9,10};
int * pointer1;
int * pointer2 = malloc(10 * sizeof(int));
int i;

//assign first pointer
pointer1 = array;

//print pointer1
printf("Pointer1's array : \n");
for(i=0;i<10;i++)
{
printf("%d ",*(pointer1+i));
}
printf("\n");

//copy pointer1 to pointer2
intCopy(pointer1,pointer2);

//print pointer2's array
printf("Pointer2's array: \n");
for(i=0;i<10;i++)
{
printf("%d ",*(pointer2+i));
}
printf("\n");



free(pointer2);
return 0;
}
//copy an integer array
int intCopy(int * input, int * output)
{

//copy input to ouput element by element
while((*output++=*input++) != '\0')
{
//copy each element until null terminator is found;
output++;
input++;
}
return 0;
}

该代码假设使 pointer2 的行为类似于 pointer1,但具有数组的新副本。
但是,当我尝试打印 pointer2 应该能够指向的整数时,我得到了这个:-
Pointer2 的数组:
0 0 0 0 0 0 0 0 0 0

我直接从教科书上复制了 strcopy 的代码,不知道如何只复制第一个
元素复制成功。感谢您的帮助。

编辑:我删除了在 intCopy() 函数中完成的额外增量,输出仍然相同。

最佳答案

2个问题:

1) 将指针递增两次,@pablo1977 也指出只需要一次

while((*output++=*input++) != '\0') {
// output++; // delete these 2 lines
// input++;
}

2) 要复制的数组的第一个元素为 0。这在 intCopy()

中充当终止条件
int array[10] = {0,2,3,4,5,6,7,8,9,10};
// --------------^

C 中的字符串是 char 的数组,最多包含终止符 '\0'。要使用 int 数组模拟“int 字符串”,int 数组还需要以 0 结尾。 OP 提供的数组的第一个 元素是0,因此仅复制第一个元素0。由于 OP 还打印出另外 9 个“0”,因此后面的 9 个值恰好是 0,因为这是 UB。

OP 需要将元素的数量传递给 intCopy()(这样数组就不需要以 0 结尾,并且可以包含 0 元素。)或确保源数组具有终止 0(在这种情况下,第一个 0 也是最后一个元素)。 OP 做了第二个,但终止 0 也是第一个元素。

与任何此类复制一样,编码也能确保目标大小足够。

关于c - 复制整数数组的 strcopy 函数版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098506/

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