0

我在以下代码中遇到分段错误

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 时遇到了分段错误。逐字节复制也不起作用。问题是什么?我没主意了。

4

6 回答 6

4

问题是result没有初始化。它会导致未定义的行为。在它可以这样使用之前,您需要确保它指向一个有效的缓冲区。例如:

result = malloc( strlen( s ) + 1 );
于 2013-03-14T12:20:13.890 回答
2

您忘记为“结果”指针分配内存。接下来试试:

result = malloc( strlen( s ) + 1 );
strcpy(result, s);
于 2013-03-14T12:21:09.910 回答
2

静态字符 * 结果;只是一个没有任何分配内存的地址!

试试这个:[编辑]

char * result = (char*)malloc(strlen(s) + 1);
于 2013-03-14T12:22:06.320 回答
0

结果只是一个未初始化的指针。在使用 strcpy 之前,您必须将结果分配给字符缓冲区。

于 2013-03-14T12:21:13.197 回答
0

您需要使用 malloc 或使用静态内存为结果指针分配一个有效的内存区域,就像您对 s 字符串所做的那样。否则,您的指针仅分配了一个随机位置,并且您的程序通过访问它来接收段错误,因为它位于程序的边界之外。

于 2013-03-14T12:22:49.343 回答
0

将结果声明为 char 数组,如 static char result[10];

或为结果指针分配一些内存。

于 2013-03-14T12:38:18.027 回答