分段错误:11将一个阵列复制到另一个阵列

时间:2018-03-05 21:11:22

标签: c arrays

我想将所有内容从buf[rm]复制到temp_a并打印temp_a但是在运行后获取分段错误:11。我需要在程序中进一步使用key[]

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

    int main()
    {
        int c = 0, rm;
        int i;
        int iter;
        int j = 0;
        int temp;
        int temp_a;

        for (int i = 0; i < 10000; i++)
        {
            char buf[32];

            for (int rm = 0; rm < 32; rm++)
            {
                buf[rm] = rand();

                strcpy(temp_a,buf[rm]);
                key[] = temp_a;
                printf("%d\n",key[] );

}

    }
}

3 个答案:

答案 0 :(得分:2)

您已声明int temp_a;,因此temp_a是具有修正大小的int变量,并且您正尝试将字符串复制到其中。在开始编码之前,请阅读C中的所有数据类型并正确理解。另请阅读有关数组以及它们与其他变量类型的不同之处。您必须将temp_a变量声明为char temp_a[32];或动态内存分配,例如char *temp_a = malloc(32);

您需要进行以下修改: -

  for (int i = 0; i < 10000; i++)
    {
        int buf[32];// this should be a int array

        for (int rm = 0; rm < 32; rm++)
        {
            buf[rm] = rand();// rand returns integer 
            temp_a = buf[rm]);
            key[rm] = temp_a;
            printf("%d\n",key[rm] );

        }
    }    

答案 1 :(得分:1)

哇,这里发生了很多错误。

函数strcpy是将终止的字符串复制到缓冲区位置。您指定int temp_a作为目标,因此适合的最大字符数为4.但是,您将buf [32]声明为未初始化,并且strcpy要求使用终止字符串作为源。该函数无法找到终止字符,因此它只是写入了temp_a的边界。

答案 2 :(得分:1)

你没有足够的内存和#34;分配&#34;对于您尝试分配给key []的条目。请注意,您需要告诉编译器应该事先准备哪种数据(内存大小)。分段错误告诉您正在尝试适应没有足够内存的数据。

根据想要分配的数据,在这种情况下,malloc()将帮助您保留必要的内存以便在寻找效率时保留。否则,您需要声明等效数组来存储所有条目。