我想将所有内容从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[] );
}
}
}
你已经声明了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] );
}
}
哇,这里发生了很多错误。
函数strcpy是将终止的字符串复制到缓冲区位置。您指定int temp_a作为目标,因此适合的最大字符数为4.但是,您将buf [32]声明为未初始化,并且strcpy要求使用终止字符串作为源。该函数无法找到终止字符,因此它只是写入了temp_a的边界。
您没有为要尝试分配给key []的条目“分配”足够的内存。请注意,您需要告诉编译器应该事先准备哪种数据(内存大小)。分段错误告诉您,您正在尝试适应没有足够内存保留的数据。
根据想要分配的数据,在这种情况下,malloc()将帮助您保留必要的内存以便在寻找效率时保留。否则,您需要声明等效数组以存储所有条目。