复制整数数组的strcopy函数的一个版本
我尝试复制一个strcopy()函数,该函数在ANSI-C中处理整数数组,作为熟悉函数的练习。 下面是我写的一段代码:复制整数数组的strcopy函数的一个版本,c,arrays,function,pointers,integer,C,Arrays,Function,Pointers,Integer,我尝试复制一个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;
#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;
}
#包括
#包括
int main()
{
int数组[10]={0,2,3,4,5,6,7,8,9,10};
int*pointer1;
int*pointer2=malloc(10*sizeof(int));
int i;
//分配第一个指针
指针1=数组;
//打印指针1
printf(“指针1的数组:\n”);
对于(i=0;i您将指针递增两次。这将导致错误的结果
变量success
和i
根本不起任何作用
要稍微模拟一下strcpy()
标准函数,您可以在stringCopy()
的每个参数中添加限定符restrict
,这至少向编码器建议参数不应相交
更改:OP已将参数更改为具有类型int
但是,结束循环的条件(与0比较)现在似乎是任意的,因为整数数组不是以null结尾的
此外,循环中指针的双增量仍然是错误的。2问题:
1) 正如@pablo1977所指出的,只需将指针递增两次,即只需一次
while((*output++=*input++) != '\0') {
// output++; // delete these 2 lines
// input++;
}
2) 要复制的数组的第一个元素为0。这在intCopy()
C中的字符串是字符数组,最多包含一个字符,包括一个终止的'\0'
,以模拟“int字符串”使用int
数组时,int
数组也需要以0
终止。OP提供的数组的第一个元素是0
,因此只复制第一个元素a0
。OP还打印了9个额外的“0”,后面的9个值恰好是0
,因为这是UB
OP需要将元素数传递给intCopy()
或确保源数组具有终止0
(在这种情况下,第一个0
也是最后一个元素).OP是第二个元素,但终止的0
也是第一个元素
与任何此类复制一样,编码也可以确保目标具有足够的大小。按照惯例,被解释为字符串的字符数组具有一个终止的\0
字符作为数组中的最后一个字符。因此,可以在事先不知道字符串长度的情况下编写字符串复制函数。数组of ints没有这样的特殊值,因此数组的大小需要传入并在循环测试条件中使用。你说的限制限定符是什么意思?我的教科书中没有提到这些。我仍然在成功地开发程序的其他功能,所以现在忽略它。我正在使用I,这样我就不必重置指针位置在每次迭代数组时。我已经修复了双增量,但输出仍然是一样的。chux向您展示了问题。我在回答中已经说过,循环中的0-终止条件没有意义。我在这里尝试处理整数数组。为什么复制整数时是字符串复制?为什么要使用数组整数的y以0值整数结尾?除了pablo1977指出的错误之外,源数组以0元素开始-因此副本不会太远。我编辑了代码,输出仍然是一样的。直到我发布之后才注意到@Michael Burr的深刻评论(这里是第2点)。
int array[10] = {0,2,3,4,5,6,7,8,9,10};
// --------------^