从char *转换为char []

时间:2013-03-14 12:18:12

标签: c char

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

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

6 个答案:

答案 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];

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