Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制整数数组的strcopy函数的一个版本_C_Arrays_Function_Pointers_Integer - Fatal编程技术网

复制整数数组的strcopy函数的一个版本

复制整数数组的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;

我尝试复制一个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;
}
#包括
#包括
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
,因此只复制第一个元素a
0
。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};
// --------------^