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

问题描述 投票:0回答:3

我想将所有内容从buf[rm]复制到temp_a并打印temp_a但是在运行之后得到Segmentation fault: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[] );

}

    }
}
c arrays
3个回答
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
投票

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

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


1
投票

您没有为要尝试分配给key []的条目“分配”足够的内存。请注意,您需要告诉编译器应该事先准备哪种数据(内存大小)。分段错误告诉您,您正在尝试适应没有足够内存保留的数据。

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

© www.soinside.com 2019 - 2024. All rights reserved.