我在以下代码中遇到分段错误
static char * result;
char s[31];
int i;
random_string(s, 10);
// for (i = 0; i < 15; i++){
// result[i] = s[i];
// }
strcpy(result, s);
printf("el result es %s\n", result);
函数random_string是:
void random_string(char * string, int length)
{
/* Seed number for rand() */
int i;
for (i = 0; i < length -1; ++i){
string[i] = rand() % 90 + 65;
}
string[length] = '\0';
}
出于某种原因,我在使用strcpy时遇到分段错误。同样逐字节复制也不起作用。问题是什么?我没有想法。
答案 0 :(得分:4)
问题是result
尚未初始化。它导致未定义的行为。在它可以像这样使用之前,你需要确保它指向一个有效的缓冲区。例如:
result = malloc( strlen( s ) + 1 );
答案 1 :(得分:2)
你忘了将内存分配给&#34;结果&#34;指针。尝试下一步:
result = malloc( strlen( s ) + 1 );
strcpy(result, s);
答案 2 :(得分:2)
静态字符*结果;只是一个没有分配内存的地址!
试试这个: [EDITED]
char * result = (char*)malloc(strlen(s) + 1);
答案 3 :(得分:0)
结果只是一个未初始化的指针。 在使用strcpy之前,必须将结果分配给字符缓冲区。
答案 4 :(得分:0)
您需要使用malloc或使用静态内存为结果指针指定有效的内存区域,就像使用s字符串一样。否则,您的指针只分配了一个随机位置,并且您的程序通过访问它来接收段错误,因为它位于程序的边界之外。
答案 5 :(得分:0)
将结果声明为char数组 static char结果[10];
或为结果指针分配一些内存。