我想将所有内容从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[] );
}
}
}
答案 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()将帮助您保留必要的内存以便在寻找效率时保留。否则,您需要声明等效数组来存储所有条目。